我已经阅读了有关此主题的几个问题, 例如here,here,here和here; 但在我的案例中,没有一个提供了有效的解决方案。
我想做什么:
为仅由我们自己的员工使用的Web应用程序实施Windows身份验证。这样他们就不需要登录应用程序了,但已经通过登录窗口进行了身份验证。
此外,我需要根据用户可能分配到的Active Directory安全组来限制应用的某些区域。
所以我希望能够用
装饰Controllers / Actions[Authorize(Roles="SomeRole")]
我尝试了什么:
我有
<authentication mode="Windows" />
在我的web.config中。我添加了一些<roleManager>
的排列,如上面链接的一些帖子中所示。目前我有这个角色经理
<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”组的一部分。
我在这个主题上找到的大多数内容都让我觉得很难完成我想要做的事情,但我显然在这里遗漏了一些东西。
答案 0 :(得分:38)
对于dev,我正在使用IISExpress 使用MVC项目的开发服务器属性进行设置 匿名身份验证已禁用,Windows身份验证已启用。 使用我们的TFS构建服务器部署Web配置,以测试和释放服务器,其服务器也如上所述进行身份验证,并在这些位置工作。
在我的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组的权限。