3

我想在使用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类的代码,以查看是否有对我有意义的内容。任何建议在这里将不胜感激!

回答

3

ANONYMOUSE用户在这里扮演的角色: 如果在IIS anonymouse用户我们允许,那么System.Web.HttpContext.Current.Request.LogonUserIdentity.Name将用户配置为IIS中的匿名。 否则它需要当前登录的用户。