当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《GetAuthorizationGroups()错误地假设我是域管理员》经验,为你挑选了0个好方法。

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

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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有