在LDAP中按完全匹配的ID搜索用户(SharePoint 2010人员选取器)

时间:2011-08-31 21:10:51

标签: sharepoint-2010 active-directory ldap

我正在尝试在LDAP中搜索用户并在SharePoint PeoplePicker中解析他的名字 用户在PeoplePicker中键入用户的idsid,然后单击CheckName 该代码使用键入的用户标识调用SearchSingleUser()。

示例:我输入'xyz'并点击CheckName          然后,下面的方法将在LDAP中搜索具有SamAccountName ='xyz'的用户以进行完全匹配。如果找到匹配,那么它应解决peoplepicker中的idsid

如果LDAP具有Domain \ xyz但用户键入xyz,则它将不匹配且无法解析

但我所看到的是这个名字得到了一半解决。

在搜索属性的完全匹配时,有什么线索我错过了什么?

这是我的代码:

public static string _LDAPSearchDefSingleUser = "(&(objectClass=user)(SamAccountName={0}))";

public static SearchResultCollection SearchSingleUser(string searchPattern)
{
    using (DirectoryEntry root = new DirectoryEntry(ldapPath, username, password))
    {                
        root.AuthenticationType = AuthenticationTypes.None;
        string filter = string.Format(_LDAPSearchDefSingleUser, searchPattern);

        using (DirectorySearcher searcher = new DirectorySearcher(root))
        {                    
            searcher.ReferralChasing = ReferralChasingOption.All;
            searcher.SearchScope = SearchScope.Subtree;
            searcher.Filter = filter;
            searcher.PropertiesToLoad.Add("objectclass");
            searcher.PropertiesToLoad.Add("SamAccountName");
            SearchResultCollection results = searcher.FindAll();

            return results;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

不确定是否理解了您的问题,但我确认了以下过滤条件:

(&(objectClass=user)(SamAccountName=xyz))
LDAP搜索中的

仅返回类user的对象,其属性SamAccountName完全等于'xyz'。

在你的情况下,如果你有多场比赛,那是因为你输入'* xyz'或'* xyz *'。

为了您的信息,我使用完全相同的代码,它就可以了。