gpt4 book ai didi

c# - 从 Active Directory 中读取用户授权组

转载 作者:行者123 更新时间:2023-11-30 15:46:08 35 4
gpt4 key购买 nike

在我们的系统中,我们以两种略有不同的方式从 Active Directory 中读取用户安全组。在一种情况下,AD 返回的组列表缺少域本地组。 GetAuthorizationGroups () 的响应取决于使用的 PrincipalContext。在失败的情况下,GetAuthorizationGroups() 将只返回全局组。结果是缺少 AD 中的所有域本地组。谁能解释一下为什么?

失败的解决方案:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net");

var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");

PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();

在这种情况下,进程由“UserA”执行。 “UserA”是域“our.domain.net”的成员。 “UserA”与工作解决方案中特定标识的用户是同一用户。因此,PrincipalContext 应该与工作解决方案中的 PrincipalContext 相同。此解决方案中 GetAuthorizationGroups() 的响应缺少来自 AD 的域本地组。

工作解决方案:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "our.domain.net", "UserA", "PasswordA");

var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.UserPrincipalName, "userB");

PrincipalSearchResult<Principal> groups = userPrincipal.GetAuthorizationGroups();

在这种情况下,调用用户在创建主体上下文时通过用户名和密码明确标识。在这种情况下,AD 会返回用户所属的所有组。这也是我希望从失败的解决方案中看到的行为。在某些情况下,我没有 UserA 的用户密码,因此无法使用工作解决方案。

请帮助我理解为什么失败的解决方案没有返回用户所属的所有组。

最佳答案

“它从 AD 中遗漏了域本地组” 因为您可能正在使用 foreach 循环迭代生成的 groups 并且您得到 NoMatchingPrincipalException 用户没有读取权限的组之一的异常,此时它停止迭代,无法获取其余组。

作为解决方案,您可以使用以下迭代器(foreach 结构背后的代码)来获取所有其余组:

var enumerator = groups.GetEnumerator();                
while (enumerator.MoveNext())
{
try
{
var e = enumerator.Current;
listView1.Items.Add(e.Name);
}
catch (NoMatchingPrincipalException)
{
}
}

关于c# - 从 Active Directory 中读取用户授权组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519033/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com