【问题标题】:Trying to search Active Directory using Ambiguous Name Resolution but it never returns anything尝试使用不明确的名称解析搜索 Active Directory,但它从不返回任何内容
【发布时间】:2019-10-23 10:44:20
【问题描述】:

无法让它返回任何结果。编译正常,运行时不报错,但结果始终为空。

如果我将其限制为诸如 DisplayName 或给定名称之类的内容,我就可以正常工作。但希望它能够工作,无论用户是先输入名字还是姓氏,并且用户不限于遵守“姓氏,名字”的 DisplayName 格式

Dim searchterm As String = RouteData.Values("Search")
Dim domain As New PrincipalContext(ContextType.Domain, "Domain")
Dim user As New CustomUserPrincipal(domain)
Dim search As New PrincipalSearcher()
Dim results As PrincipalSearchResult(Of Principal)

jss.MaxJsonLength = Integer.MaxValue
user.Anr = String.Format("*{0}*", searchterm)
search.QueryFilter = user
CType(search.GetUnderlyingSearcher, DirectoryServices.DirectorySearcher).SizeLimit = 25
results = search.FindAll()
<DirectoryObjectClass("user")>
<DirectoryRdnPrefix("CN")>
Public Class CustomUserPrincipal
    Inherits UserPrincipal

    Public Sub New(context As PrincipalContext)

        MyBase.New(context)

    End Sub

    <DirectoryProperty("anr")>
    Public Property Anr As String
        Get
            Return CStr(ExtensionGet("anr")(0))
        End Get
        Set(value As String)
            ExtensionSet("anr", value)
        End Set
    End Property

End Class

我期待一个对象,我可以枚举并提取单个 UserPrincipal 以提取详细信息。但我只得到一个空对象

【问题讨论】:

    标签: asp.net active-directory directoryservices


    【解决方案1】:

    我认为这是你的问题:

    user.Anr = String.Format("*{0}*", searchterm)
    

    具体来说,您在搜索词周围加上星号。根据documentation,它将像(anr=Smith) 这样的搜索词扩展为如下内容:

    (|(displayName=smith*)(givenName=smith*)(legacyExchangeDN=smith)(physicalDeliveryOfficeName=smith*)(proxyAddresses=smith*)(Name=smith*)(sAMAccountName=smith*)(sn=smith*))
    

    请注意,它已经进行了“开始于”类型的搜索。把你自己的通配符放在那里会搞砸。

    更具体地说,它是开头的星号。我在我们自己的 AD 环境中对此进行了测试。如果我搜索 (anr=*Gabriel*)(anr=*Gabriel),我没有得到任何结果。如果我搜索(anr=Gabriel*) 我会得到结果,但它确实对结果没有影响(结果与我搜索(anr=Gabriel) 相同)。

    解决办法是把那行改成这样:

    user.Anr = searchterm
    

    它并不完全等同于您似乎想要的“包含”搜索,但是在任何搜索的开头放置通配符确实会降低性能。它不能再使用任何索引来完成搜索,因此它不得不查看您域中的每个用户帐户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多