Как я могу определить, содержит ли группа AD данный объект DirectoryEntry из другого (доверенного) домена? - PullRequest
3 голосов
/ 16 декабря 2008

Я пытаюсь улучшить свой код, который определяет, является ли пользователь членом данной группы AD. По сути, он работает, за исключением случаев, когда член группы находится в другом (доверенном) домене, поскольку он хранится в качестве Foreignsecurityprincipal.

Учитывая, что у меня есть действительный объект DirectoryEntry для группы, которую я хочу проверить, и для учетной записи, которую я хочу проверить, мне нужна строка фильтра DirectorySearcher, которая позволит мне подтвердить, что учетная запись находится в этой группе, даже если учетная запись является принципом зарубежной безопасности.

(Пример кода VB.NET, демонстрирующий проблему)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group
Dim UserToCheckFor as DirectoryEntry = ... Code to get User

DSearcher = New DirectorySearcher(ContainerGroup, "(WHATCANIPUTINHERE)", New String() {"member;Range=0-5000"}, SearchScope.Base)
DSearcher.AttributeScopeQuery = "member"

'If an object is found, the account was in the group
Return (DSearcher.FindOne() IsNot Nothing)  

1 Ответ

1 голос
/ 17 декабря 2008

Хорошо. Нашел это. Вот трюк.

Я пытаюсь улучшить свой код, который определяет, является ли пользователь членом данной группы AD. По сути, он работает, за исключением случаев, когда член группы находится в другом (доверенном) домене, поскольку он хранится в качестве Foreignsecurityprincipal.

(Пример кода VB.NET)

Dim ContainerGroup as DirectoryEntry = ... Code to get Group
Dim UserToCheckFor as DirectoryEntry = ... Code to get User

DSearcher = New DirectorySearcher
Dim DSearcher As New DirectorySearcher(ContainerGroup, getLDAPQueryStringUsingSID(containedGroup), New String() {"member;Range=0-5000"}, SearchScope.Base)

Return (DSearcher.FindOne() IsNot Nothing) 


** Helper Methods **

Private Function getLDAPQueryStringUsingSID(ByVal DEObject As DirectoryEntry) As String            
  Return "(objectSid=" + getSDDLSidForDirectoryEntry(DEObject) + ")"
End Function

Private Function getSDDLSidForDirectoryEntry(ByVal DEObject As DirectoryEntry) As String
      Dim bytes As Byte() = CType(DEObject.Properties("objectSid").Value, Byte())
      Dim sid As New System.Security.Principal.SecurityIdentifier(bytes, 0)
      Return sid.ToString
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...