1

我正在使用 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”成功。

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

4

2 回答 2

1

模式中的属性定义定义了哪些字符可用于正在定义的属性的属性值中。匹配规则(也在模式中的属性定义中)确定如何比较属性值的相等性、子字符串、排序等。匹配规则决定了属性比较的“区分大小写”(虽然它真的没那么简单)。

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

于 2012-12-12T17:44:27.540 回答
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
于 2020-01-22T14:35:52.887 回答