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 クラスのコードを調べて、自分にとって意味のあるものがあるかどうかを確認しました。ここでアドバイスをいただければ幸いです。