0

私のプロジェクト (c#) には、CurrentPrincipal にアタッチするカスタム プリンシパルを作成する HttpModule があります。

これは、すべての MVC3 アプリと従来の ASP.Net アプリで機能しています。

Controller メソッドを保護するために使用する AuthorizeAttribute オーバーライドがあります - かなり標準的なようです。

問題は、カスタム authorizeAttribute で、ユーザー (httpContext.User) が RolePrincipal であり、カスタム プリンシパルではないことです。

トラブルシューティングを行うために、global.asax にいくつかのハンドラーを配置して、beginrequest() と endrequest() をトラップします。さて、BeginRequest では、私の User は私たちが期待するもの、つまりカスタム プリンシパルです。EndRequest では、ユーザーは再び RolePrincipal になります。HttpModule の web.config 宣言は適切です。HttpModule のコードをステップ実行できます。

誰が何が起こっているのか知っていますか?カスタム HttpModule がありますが、このプロジェクトのコードを変更することはできません (どこでも使用されており、正常に動作します)。

これは私の最初の MVC4 プロジェクトです。

以下のコード。私が省略した情報はありますか?

編集: 承認属性コードを追加しました。

Code
      (In HttpModule)
    private void BeginRequest(object Sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        var Id = new TASBIdentity();
        context.User = new TASBPrincipal(Id);
        Thread.CurrentPrincipal = context.User;
                      (etc...)

    (In global.asax)
    void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        var user = context.User;  // user is correct type
    }

    void Application_EndRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        var user = context.User;    // user is default type (not correct)
    }

   (In the authorizeattribute)
public class SecuredByFunctionAttribute : AuthorizeAttribute
{
    private readonly string _functionKey;

    public SecuredByFunctionAttribute(string functionKey)
    {
        _functionKey = functionKey;
    }
    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        return httpContext.User.IsInRole(_functionKey);
    }
4

0 に答える 0