我想在使用Windows身份验证的MVC Intranet应用程序中的特定控制器上使用MVC Authorize属性。 IIS 7.5仅设置为使用Windows身份验证,并且匿名访问在web.config中关闭。我对域进行了身份验证,但是,在执行控制器上的任何操作时,仍会提示您提供凭据。我检查了我的浏览器设置(IE9),并将其设置为使用我当前的Windows凭据自动登录。HttpContext.Current.Request.LogonUserIdentity.Groups返回不同的结果
我试图创建一个自定义的授权属性类来查看发生了什么。在AuthorizeCore中,我使用httpContext检查了我的用户名和组成员身份。我发现从我所属的System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups中缺少一个组。一旦授权核心返回false并出现凭证提示,我提供与当前登录的凭证相同的凭证,并且AuthorizeCore再次运行。这一次,找到了所有适当的组,并且基本的AuthorizeCore当然授权用户,一切正常。下面是我创建的自定义授权类,所以
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")]
的另一件事,在web.config中的角色管理器是:
<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" />
有没有什么我不了解这应该如何工作?我只想让我的认证/授权由AD处理。我在MVC方面相当新,并且诚实地配置了任何认证/授权方案。我确实下载了MVC 3的源代码,以查看AuthorizeAttribute类的代码,以查看是否有对我有意义的内容。任何建议在这里将不胜感激!