Asp.net mvc 以active directory组作为角色使用windows身份验证

Asp.net mvc 以active directory组作为角色使用windows身份验证,asp.net-mvc,active-directory,windows-authentication,Asp.net Mvc,Active Directory,Windows Authentication,我读了几个关于这个话题的问题, 如,及;; 但在我的案例中,没有一个能提供有效的解决方案 我想做什么: 为仅由我们自己的员工使用的web应用程序实施Windows身份验证。通过这种方式,他们不需要登录应用程序,但已经通过登录windows进行了身份验证 此外,我需要根据用户可能被分配到的Active Directory安全组限制应用程序的某些区域 因此,我希望能够用 [Authorize(Roles="SomeRole")] 我所尝试的: 我有 <authentication mode=

我读了几个关于这个话题的问题, 如,及;; 但在我的案例中,没有一个能提供有效的解决方案

我想做什么:

为仅由我们自己的员工使用的web应用程序实施Windows身份验证。通过这种方式,他们不需要登录应用程序,但已经通过登录windows进行了身份验证

此外,我需要根据用户可能被分配到的Active Directory安全组限制应用程序的某些区域

因此,我希望能够用

[Authorize(Roles="SomeRole")]
我所尝试的:

我有

<authentication mode="Windows" />
post

事实上,如果我用
[Authorize]
装饰控制器,我可以很好地访问它

但是:

我可以在网络上的用户设置中看到,我是一个名为“IT”的广告安全组的成员。但是,如果我用<代码>(授权(角色=“IT”)”/<代码>来装饰同一个控制器,我得到的是ASP.NET开发服务器为401个未授权的服务提供的空白屏幕。strong>这是出乎意料的。我想我应该能够在登录到windows并且是“IT”组成员时查看该页面


我在这个主题上所发现的大部分东西听起来都很简单,可以完成我想做的事情,但我显然遗漏了一些东西。

对于开发人员,我使用的是IISExpress 通过设置MVC项目的开发服务器属性 已禁用匿名身份验证,并已启用Windows身份验证。 web配置使用我们的TFS构建服务器进行部署,以测试和发布服务器,服务器的身份验证也如上所述进行设置,并在这些位置工作

在我的web.config中,我有

  <system.web> 
....
       <authentication mode="Windows" />
        <authorization>
          <deny users="?" />
        </authorization>
        <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
          <providers>
            <clear />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>
....

    </system.web>


在我记得注销并重新登录后,应用了我对广告组的权限。

是否已将ASP.NET成员资格提供程序设置为使用Active Directory?不仅仅是角色提供程序…@marc_s我在web.config中将ASpNetActiveDirectoryMembershipProvider设置为默认值。如果你觉得可能是一个错误导致了这个问题,我可以发布这个帖子。这是一个旧线程,但是有了广告安全性,你需要指定域吗?[Authorize(Roles=@“domainname\SomeRole”)]其他注意事项:如果您像我一样在办公桌上撞了几个小时试图解决此问题,请注意:注销/登录仅在您实际连接到公司网络时才能获取您的新凭据。。。当您的无线连接在登录后才启动时,您的计算机将无法从域控制器获取新的组成员身份,您将有一段时间感到头痛…@DanielHume,这是因为AD在有线连接上同步效果最好。您只需在命令行上运行gpupdate即可获得相同的效果
  <system.web> 
....
       <authentication mode="Windows" />
        <authorization>
          <deny users="?" />
        </authorization>
        <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
          <providers>
            <clear />
            <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
          </providers>
        </roleManager>
....

    </system.web>
[Authorize(Roles = @"DOMAIN\ADGroup")]
Public ActionResult Index()
{...}
 public ActionResult Index()
        {
            var User = System.Web.HttpContext.Current.User;
            if (User.IsInRole("DOMAIN\\ADGroup"))
            {
                return RedirectToAction("IRSAdmin");
            }
            return View();
        }