我正在使用Windows身份验证在ASP.NET中开发Intranet应用程序。我创建了一个从Active Directory域控制器获取信息的AD类。这就是我用来获取当前登录用户所在的用户组之类的内容。问题出在用户所在的ASP.NET角色中。看起来很有趣,但用户所在的AD组列表完全是与用户拥有的角色列表不同。
这是我得到的:
certian用户的AD组列表
同一用户的角色列表
其他信息:
web.config
的一部分看起来像这样:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" enabled="true">
<providers>
<remove name="AspNetSqlRoleProvider" />
</providers>
</roleManager>
如何核对清单?
我需要让我的角色列表反映与我的AD组列表相同的数据,因为我将在我的站点地图和其他内容中使用角色修剪。
答案 0 :(得分:4)
部分结果是因为用户所属的某些群组是其他群组的成员。用户组的完整列表将包括用户所属的所有组,包括直接和通过其他也是成员的组的成员身份。
该列表还将包含默认情况下通常对本机管理工具隐藏的内置组。
最好的办法是让应用程序存储您希望应用程序查看的组的主列表,或者您希望应用程序忽略的组列表(包含列表或排除列表)。然后,当您撤回特定用户的角色时,只需将其与配置的排除或包含列表进行比较,然后过滤掉不需要的结果。
如果您想要一种更简单的方法,那么开源AD role provider over at codeproject已经支持排除和包含列表。它还有其他很好的功能,如可选的缓存,将真正加快您的应用程序。内置AD角色提供程序执行得非常糟糕。
答案 1 :(得分:0)
您可能需要专门为要枚举的组分配网站权限。