我有一种情况,我需要递归查找用户的 AD 组。
例如 :
I have such group hierarchy -
Group1
|_
Group2
|_
Group3
|_
UserA
根据层次结构,UserA 的 Groups 是 Group1, Group2, Group3
为了通过代码找到它,我使用了以下方法:
Dim UserP1 As UserPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, Remote_ID)
allrecursiveUserGroups = UserP1.GetAuthorizationGroups()
这种方法会递归地给我所有的组,但是对于一个用户来说它失败了,并且给出了如下的异常:
System.DirectoryServices.AccountManagement.dll 中发生“System.DirectoryServices.AccountManagement.PrincipalOperationException”
附加信息:尝试检索授权组时,发生错误 (1358)。
这是完整的 StackTrace :
System.DirectoryServices.AccountManagement.PrincipalOperationException 未处理 ErrorCode=0 HResult=-2146233087 消息=尝试检索授权组时,发生错误 (1358)。源=System.DirectoryServices.AccountManagement
StackTrace:在 System.DirectoryServices.AccountManagement.AuthZSet..ctor(字节 [] userSid,NetCred 凭据,ContextOptions contextOptions,字符串 flatUserAuthority,StoreCtx userStoreCtx,对象 userCtxBase)
在 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 获得的专有名称中存在特殊字符。
这里的问题是当 [Distinguished Name][2] ofUserPrincipal
包含特殊字符(在我的情况下为逗号)时,它会引发异常。在我的情况下,专有名称是:
CN=史密斯\,约翰,DC=mydomain,DC=com
这里反斜杠被用作UserPrincipal
自己添加的转义字符。
如果 [Distinguished Name][2] 不包含任何特殊字符,则函数 [GetAuthorizationGroups()][1] 可以正常工作。例如
CN=Smith John,DC=mydomain,DC=com
问题的原因是什么,是否有任何可用的解决方案?
我在使用GetAuthorizationGroups()
方法的第一种方法中缺少什么?
错误代码 1358 的原因是什么?
GetAuthorisationGroups()
除了类之外,还有其他递归查找组的好方法吗UserPrincipal