GetAuthorizationGroups()错误地假设我是域管理员

时间:2017-01-25 15:58:07

标签: c# authentication c#-4.0 active-directory

我有一个域组名称,必须检查域用户是否是递归的一部分。在我的用户域名为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。

UPDATE2

由于PrincipalContext内部使用DirectorySearcher,我试图与目录搜索器一起使用解决方案。它只返回正确的组。 (虽然我现在还不确定它是否具有像Principle上下文一样的递归组搜索功能)

因此,这是一个错误或与其他群组有关,例如 dlatikay 指出

  

此方法以递归方式搜索所有组,并返回用户所属的组。返回的集合还可能包含系统将用户视为授权目的的其他组。

     

此方法返回的组可能包含来自与主体不同的范围和存储的组。例如,如果主体是AD DS对象,其DN为“CN = SpecialGroups,DC = Fabrikam,DC = com,则返回的集合可以包含属于”CN = NormalGroups,DC = Fabrikam,DC =的组融为一体

但是为什么它会返回其他组,我必须确保用户确实在返回的组中享有特权。

0 个答案:

没有答案