37

我已经阅读了有关此主题的几个问题,例如此处此处此处此处;但就我而言,没有人提供可行的解决方案。

我想做的事:

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

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

所以我希望能够用

[Authorize(Roles="SomeRole")]

我试过的:

我有

<authentication mode="Windows" />

在我的 web.config 中。我已经添加了一些 a 的排列,这些排列<roleManager>在上面链接的一些帖子中可以找到。目前我有这个角色经理

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

正如在这篇文章中发现的那样。

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

然而:

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

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

4

1 回答 1

42

对于开发人员,我使用 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 组的权限。

于 2013-06-21T01:34:51.147 回答