3

Windows 認証を使用して、MVC イントラネット アプリケーションの特定のコントローラーで MVC Authorize 属性を使用しようとしています。IIS 7.5 は Windows 認証のみを使用するように設定されており、匿名アクセスは web.config でオフになっています。ドメインに対して認証されていますが、コントローラーで何らかのアクションが実行されると、資格情報の入力を求められます。ブラウザの設定 (IE9) を確認したところ、現在の Windows 資格情報で自動的にログインするように設定されています。

何が起こっているのかを確認するために、カスタム Authorize Attribute クラスを作成しようとしました。AuthorizeCore 内で、httpContext を使用してユーザー名とグループ メンバーシップを確認しました。私が所属する System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups に欠落しているグループがあることがわかりました。authorizecore が false を返し、資格情報のプロンプトが表示されたら、現在ログインしているのと同じ資格情報を入力し、AuthorizeCore を再度実行します。今回は、すべての適切なグループが見つかり、基本の AuthorizeCore はもちろんユーザーを承認し、すべてが正常に機能します。これが私が作成したカスタムAuthorizationクラスです

public class MyAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool chk = httpContext.User.IsInRole("mydomain\\heavyequipadmin");

        // this is just to see what AD groups are provided for the current user   
        ArrayList groups = new ArrayList();
        foreach (System.Security.Principal.IdentityReference group in System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
        {
            groups.Add(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString());
        }

        // just run the base method to Authorize 
        return base.AuthorizeCore(httpContext);
    }
}

私のコントローラー全体の属性は次のとおりです。

[MyAuthorize(Roles = "mydomain\\HeavyEquipAdmin")]

もう 1 つ、web.config のロール マネージャーは次のとおりです。

 <roleManager defaultProvider="AspNetWindowsTokenRoleProvider" />

これがどのように機能するかについて、私が理解していないことがありますか? 認証/承認をADで処理したいだけです。私は MVC の初心者であり、認証/承認スキームを正直に構成しています。MVC 3 のソースをダウンロードして、AuthorizeAttribute クラスのコードを調べて、自分にとって意味のあるものがあるかどうかを確認しました。ここでアドバイスをいただければ幸いです。

4

1 に答える 1

3

ANONYMOUSE ユーザーの役割: IIS で匿名ユーザーが許可されている場合、System.Web.HttpContext.Current.Request.LogonUserIdentity.Name は、IIS で匿名として構成されているユーザーを取得します。それ以外の場合は、現在ログインしているユーザーが使用されます。

于 2012-12-19T08:28:48.287 に答える