我有一个域组名称,必须检查域用户是否是递归的一部分。在我的用户域名为prinical后,我尝试通过所有授权组
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
UserPrincipal userPrin = UserPrincipal.FindByIdentity(ctx, userToCheck);
if (userPrin != null)
{
foreach (GroupPrincipal group in userPrin.GetAuthorizationGroups())
{
if (group.Name.Equals(groupName, System.StringComparison.OrdinalIgnoreCase))
{
if (group.Context.Name.StartsWith(domain, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
}
}
}
[我知道,startsWith可能不是最好的方式,但一切都像魅力一样]
唯一的问题:我有两个帐户都不属于域的内置管理员组。找到两个用户主体并枚举组,但是: 对于一个用户,在检查内置管理员组时结果为FALSE 对于一个用户,在检查内置管理员组时结果为TRUE
我知道检查的组确实是两次尝试的正确域对象。
为什么说一个帐户在该组中?
通过cmd(网络用户/域)进行搜索时,该组不会显示。 从另一台计算机运行代码(同一用户是查询)时,该组也不会显示。 但是,如果您查询以管理员身份登录的当前用户,则认为该用户位于该组
中CN=Administratoren,CN=Builtin,DC=domain,DC=de
这是错的。他可能在本地组,但绝对不在域管理员组中。 该组的SID是 S-1-5-32-544 btw。
由于PrincipalContext内部使用DirectorySearcher,我试图与目录搜索器一起使用解决方案。它只返回正确的组。 (虽然我现在还不确定它是否具有像Principle上下文一样的递归组搜索功能)
因此,这是一个错误或与其他群组有关,例如 dlatikay 指出
此方法以递归方式搜索所有组,并返回用户所属的组。返回的集合还可能包含系统将用户视为授权目的的其他组。
此方法返回的组可能包含来自与主体不同的范围和存储的组。例如,如果主体是AD DS对象,其DN为“CN = SpecialGroups,DC = Fabrikam,DC = com,则返回的集合可以包含属于”CN = NormalGroups,DC = Fabrikam,DC =的组融为一体
但是为什么它会返回其他组,我必须确保用户确实在返回的组中享有特权。