【发布时间】:2011-05-25 17:15:04
【问题描述】:
按照这里的教程进行操作:
http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-cs
我正在尝试实现 Windows 身份验证和授权。
本地主机上的 IIS 配置为使用 Windows 身份验证。以下是我的 web.config 中的相关元素:
<authentication mode="Windows">
</authentication>
<authorization>
<deny users="?" />
</authorization>
在我的控制器中,我有这个:
[Authorize(Roles = "MY_DOMAIN\\SomeGroup")]
public ActionResult Index()
{
IList<CampusListViewModel> campusList = _campusRepository.List(true);
return View("Index", campusList);
}
现在,假设我将 SomeGroup 设置为等于我所属的 AD 组。在这种情况下,authorize 属性似乎起作用,并且允许我查看视图。接下来,假设我将 SomeGroup 设置为一个我不是其成员的组......再次,事情似乎正在工作......我不允许看到视图。
我知道你在想什么:“否决这个蹩脚的问题......这个失败者还想从授权属性中得到什么?”
问题是,在我的测试过程中,我将自己从一个我之前加入的 AD 组中删除了。出于某种原因,当我将 SomeGroup 设置为等于该组时,我仍然能够看到视图。
使用 User 对象的 IsInRole 方法,如下所示:
@User.IsInRole("MY_DOMAIN\\GroupINoLongerBelongTo")
输出“真”。所以,某处的某个地方,仍然认为我在那个广告组中。我们有三个域控制器,我检查了每个域控制器以验证我不在组中,以防万一控制器之间的复制出现问题,而这似乎不是问题。
我错过了什么? IIS会缓存这种东西吗?我试过重新启动 IIS 并重新启动服务器无济于事......有什么想法吗?
更新:现在已解决。我做了下面@artem 建议的两个更改,但它们似乎都不起作用。然后我一气之下关掉了电脑,然后跺着脚去吃午饭。当我一个小时后回来并打开我的电脑时,事情开始工作了。因此,@artme 的建议和重启解决了这个问题。
我猜我午餐吃的青辣椒卷饼也不能排除......
【问题讨论】:
-
我知道这已经解决了,但是这里还有一个未知因素所以这里
s my 2 cents: the list of groups in your token is only built once when you log in, then cached. so if you change a users AD 中的组成员,用户必须重新登录才能获得更新的组成员 -
感谢您提供更多信息!
标签: asp.net-mvc iis-7 windows-authentication