ldap嵌套组成员资格
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ldap嵌套组成员资格相关的知识,希望对你有一定的参考价值。
是否可以创建一个LDAP查询,该查询将返回(或检查)嵌套组中的用户?例如UserA是GroupA的成员,GroupA是GroupB的成员。我希望GroupB上的查询返回UserA是一个成员。仅限LDAP。服务器是Active Directory。
答案
是的,使用LDAP_MATCHING_RULE_IN_CHAIN匹配规则(OID 1.2.840.113556.1.4.1941)。例如:
(memberOf:1.2.840.113556.1.4.1941:=cn=group,cn=users,DC=x)
见http://msdn.microsoft.com/en-us/library/aa746475%28VS.85%29.aspx
另一答案
在我的情况下使用memberOf:1.2.840.113556.1.4.1941:=
时,你必须使用你的组的完整专有名称CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com
是整个专有名称
(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com))
您可以通过运行以下代码并输入此过滤器来获取您的组的可分辨名称(&(objectClass = group)(name = MyGroup))
Imports System.DirectoryServices
Module Module1
Sub Main()
Dim run As Boolean = True
Dim Filter As String
While run
Console.WriteLine("Enter Filter:")
Filter = Console.ReadLine()
If Filter = "exit" Then
run = False
Else
checkFilter(Filter)
End If
End While
End Sub
Function checkFilter(Filter As String) As Boolean
Dim search As New DirectorySearcher("LDAP://dc=Domain,dc=com")
Try
search.Filter = Filter
search.PropertiesToLoad.Add("name")
search.PropertiesToLoad.Add("distinguishedName")
search.SearchScope = SearchScope.Subtree
Dim results As SearchResultCollection = search.FindAll()
If results Is Nothing Then
Console.WriteLine("Nothing")
Return False
Else
If results.Count() = 0 Then
Console.WriteLine("non found")
End If
Dim result As SearchResult
For Each result In results
Console.WriteLine(result.Properties("name")(0).ToString())
Console.WriteLine(result.Properties("distinguishedName")(0).ToString())
'For Each prop In result.Properties("members")
' Console.WriteLine(prop.ToString())
'Next
Next
Console.WriteLine(String.Format("{0} Users Found", results.Count()))
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Return True
End Function
End Module
另一答案
作为您的问题,查询应该是
(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1}))
{0}
是嵌套组,它应该是一个杰出的名字
{1}
是您想要的用户sAMAccountName(您可以在(sAMAccountName={1})
中使用除sAMAccountName之外的任何其他用户属性)
然后,如果用户是嵌套组的成员,您将获得响应的用户详细信息
以上是关于ldap嵌套组成员资格的主要内容,如果未能解决你的问题,请参考以下文章