我有一个域组名称,并且必须检查域用户是否是递归的一部分.在我的用户域名为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
我知道检查的组确实是两次尝试的正确域对象.
为什么说一个帐户在该组中?
UPDATE通过cmd(网络用户/域)进行搜索时,该组不会显示.从另一台计算机运行代码(同一用户是查询)时,该组也不会显示.但是,如果您查询以管理员身份登录的当前用户,则认为该用户位于该组中
CN=Administratoren,CN=Builtin,DC=domain,DC=de
这是错的.他可能在本地组,但绝对不在域管理员组中.该组的SID是S-1-5-32-544 btw.
UPDATE2由于PrincipalContext内部使用DirectorySearcher,我试图与目录搜索器一起使用解决方案.它只返回正确的组.(虽然我现在还不确定它是否具有像Principle上下文一样的递归组搜索功能)
因此,无论这是一个bug或者有事情做与其他组 一样dlatikay指出
此方法以递归方式搜索所有组,并返回用户所属的组.返回的集合还可以包括系统将用户视为授权目的的其他组.
此方法返回的组可能包括来自与主体不同的范围和存储的组.例如,如果主体是AD DS对象,其DN为"CN = SpecialGroups,DC = Fabrikam,DC = com,则返回的集合可以包含属于"CN = NormalGroups,DC = Fabrikam,DC =的组COM.
但是为什么它会返回其他组,我必须确保用户确实在返回的组中享有特权.