使用PrincipalContext查找用户的AD组时获取错误

时间:2018-05-15 12:56:57

标签: c# vb.net userprincipal principalcontext adgroup

我遇到需要递归查找用户AD组的情况。

例如:

I have such group hierarchy -
Group1
  |_
    Group2
      |_
        Group3
         |_
           UserA

根据层次结构,UserA的组是Group1,Group2,Group3

为了通过代码找到它,我使用了以下方法:

Dim UserP1 As UserPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, Remote_ID)
allrecursiveUserGroups = UserP1.GetAuthorizationGroups()

这个方法会以递归方式给我所有的组,但是对于一个用户而言失败并给出异常,如下所示:

  

' System.DirectoryServices.AccountManagement.PrincipalOperationException'   发生在System.DirectoryServices.AccountManagement.dll

中      

其他信息:尝试检索授权时   组,发生错误(1358)。

这是完整的StackTrace:

  

System.DirectoryServices.AccountManagement.PrincipalOperationException   未处理ErrorCode = 0 HResult = -2146233087 Message = While   尝试检索授权组时,发生错误(1358)。   源= System.DirectoryServices.AccountManagement

     

堆栈跟踪:          在System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte []   userSid,NetCred凭据,ContextOptions contextOptions,String   flatUserAuthority,StoreCtx userStoreCtx,Object userCtxBase)

     

at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal)   p)   在System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

我使用的另一种方法是:

Dim UserP1 As UserPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, Remote_ID)
Dim grps = UserP1.GetGroups

这并没有抛出任何异常并且对所有用户都完美地运行,但它只返回直接组,即我的情况下的Group3

我在GetAuthorisationGroups面临的问题是我在UserPrincipal获得的专有名称中存在特殊字符。

这里的问题是当UserPrincipal的[专有名称] [2]包含特殊字符(在我的情况下是逗号)时,它会抛出异常。 在我的例子中,专有名称是:

  

CN = Smith \,John,DC = mydomain,DC = com

此处反向斜杠已用作转义字符,由UserPrincipal本身添加。

如果[专有名称] [2]不包含任何特殊字符,则[GetAuthorizationGroups()] [1]函数可以正常工作。 e.g。

  

CN = Smith John,DC = mydomain,DC = com

问题的原因是什么?有没有可用的解决方案?

我在使用GetAuthorizationGroups()方法的第一种方法中缺少什么?

错误代码1358的原因是什么?

除了GetAuthorisationGroups() UserPrincipal个{{1}}以外,是否还有其他好方法可以递归查找群组

0 个答案:

没有答案