Yog*_*esh 2 c# active-directory windows-authentication asp.net-mvc-5
在我们的 MVC 5 Web 应用程序中,我们使用 User.IsInRole() 函数来评估当前登录用户(使用 Windows 身份验证)是否属于 Active Directory 中相应组的一部分。在我的本地,此功能的评估速度很快,但在生产中则需要一些时间。此函数是否每次都会访问 Active Directory 并查看用户是否属于组?
假设我在数据库中配置了总共 10 个组,并且我想获取用户所属组的列表。因此,我迭代 10 个组并调用 User.IsInRole("group_name") 并准备预期的组列表。这是否会每次都访问 Active Directory 以检查组中用户的成员身份?
我有同样的问题,我正在为想要将 AD 身份验证添加到其软件的供应商调查此问题。简短的回答:是和否:-)
长答案:我已经分析过WindowsPrincipal.IsInRole
它不会(通过 LDAP)查询 AD 的组成员资格,而是使用 Kerberos 令牌中的组 SID 并检查票证中是否包含组的 SID。因此,它不会击中 AD,而是:
如果您使用IsInRole(string),它会执行 Name ==> SID 查找(使用 win32 LsaLookupNames2() 调用)。
因此,建议首先将组名称转换为 SID,然后仅使用 SID:
http://msdn.microsoft.com/en-us/library/wak3kd03(v=vs.110).aspx
出于性能原因,建议使用 IsInRole(SecurityIdentifier) 重载作为确定用户角色的首选重载。
我还没有检查过这一点,但下次我会这样做。
我希望找到时间进行基准测试(使用此方法检查企业 AD 中具有 > 100K 对象的 ~40 个组)。但这可能需要一周左右的时间。
如果您对测试结果感兴趣,请通知我。
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |