区分大小写的LDAP查询

时间:2012-12-12 17:31:59

标签: c# active-directory ldap

我正在使用DirectoryEntry / DirectorySearcher进行LDAP查询,以通过C#Web应用程序验证Active Directory中的用户(ConnectionString属性与LDAP://server.domain等效):

internal bool AuthenticateUser(string username, string password)
{
    if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        return false;

    var entry = new DirectoryEntry(this.ConnectionString, username, password);
    var searcher = new DirectorySearcher { SearchRoot = entry, Filter = "(objectclass=user)" };

    try
    {
        var result = searcher.FindOne();
        return true; //connection to AD succeeded, authentication was successful
    }
    catch (DirectoryServicesCOMException)
    {
        return false; //impersonating the user failed
    }
}

这些查询都在命中SBS服务器,当您创建新用户时,它似乎使用Windows 2000之前的大写值(即NetBIOS)名称。因此,如果我添加一个名为“Test User”的新用户,则用户名可能是“tuser”,但它指定的NetBIOS名称是“TUser”。当用户输入使用此方法的用户/通行证时,“tuser”无法通过身份验证,而“TUser”成功。

我的问题是是否可以修改它,以便用户名不必区分大小写?

2 个答案:

答案 0 :(得分:1)

架构中的属性定义定义了可以在要定义的属性的属性值中使用哪些字符。匹配规则(也在模式中的属性定义中)确定如何比较属性值的相等性,子串,排序等。匹配规则确定了属性比较的“区分大小写”(虽然它实际上并非那么简单)。

比较属性值时,服务器(和客户端)必须使用匹配规则。

答案 1 :(得分:1)

对于OpenLDAP,有一种语法可以区分大小写。

两个简短的例子:

(&(ou:caseExactMatch:=cwm)(objectClass=person))

+ will match case-sensitive ou= value of 'cwm'
- will NOT match 'CWM', 'CwM' or 'Cwm'

(&(ou=cwm)(objectClass=person))

+ will match case-insensitive (by default) all ou= values like 'cwm', 'CWM', 'CwM', 'Cwm'

语法似乎是:

attr:matchingRule:=value