【问题标题】:using windows authentication with active directory groups as roles将活动目录组作为角色使用 Windows 身份验证
【发布时间】:2012-11-25 21:19:07
【问题描述】:

我已经阅读了有关此主题的几个问题, 如herehereherehere; 但在我的情况下,没有人提供可行的解决方案。

我想做的事:

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

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

所以我希望能够用

来装饰控制器/动作
[Authorize(Roles="SomeRole")]

我的尝试:

我有

<authentication mode="Windows" />

在我的 web.config 中。我添加了&lt;roleManager&gt; 的几种排列,如上面链接的一些帖子中所示。目前我有这个角色经理

<roleManager defaultProvider="WindowsProvider"
  enabled="true"
  cacheRolesInCookie="false">
      <providers>
        <add
          name="WindowsProvider"
          type="System.Web.Security.WindowsTokenRoleProvider" />
      </providers>
    </roleManager>

this 帖子中找到。

事实上,如果我用[Authorize] 装饰一个控制器,我可以正常访问它。

但是:

我可以在网络上的用户设置中看到,我是一个名为“IT”的 AD 安全组的成员。但是,如果我用[Authorize(Roles="IT")] 装饰同一个控制器,我会得到由 asp.net 开发服务器为未授权的 401 服务的空白屏幕。 这是出乎意料的。我认为我应该能够在我登录到 Windows 并且属于“IT”组时查看该页面。

我在这个主题上找到的大部分内容听起来都很容易完成我想做的事情,但我显然在这里遗漏了一些东西。

【问题讨论】:

  • 您是否也将 ASP.NET 成员资格提供程序设置为使用 Active Directory?不仅仅是角色提供者......
  • @marc_s 我确实在 web.config 中将 ASpNetActiveDirectoryMembershipProvider 设置为默认值。如果您认为那里可能存在导致问题的错误,我可以发布。
  • 这是一个老线程,但是有AD安全,需要指定域吗? [授权(角色=@“域名\SomeRole”)]

标签: asp.net-mvc active-directory windows-authentication


【解决方案1】:

对于开发人员,我使用的是 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>

我可以使用

[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();
        }

在我记得注销并重新登录后,我获得了 AD 组的权限。

【讨论】:

  • 附加说明,以防像我一样,你在桌子上撞了几个小时试图解决这个问题:注销/登录只会在你物理连接到公司网络...如果您的无线连接在登录后才出现,那么您的机器将无法从域控制器中获取新的组成员身份,您将暂时摸不着头脑...跨度>
  • @DanielHume 这是因为 AD 在有线连接上的同步效果最好。您可以在命令行上运行 gpupdate 以获得相同的效果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多