[英]Case-Sensitive LDAP Queries
我正在使用 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”會成功。
我的問題是是否可以修改它以便用戶名不必區分大小寫?
模式中的屬性定義定義了哪些字符可以用於正在定義的屬性的屬性值中。 匹配規則(也在模式的屬性定義中)確定如何比較屬性值的相等性、子字符串、排序等。 匹配規則決定了屬性比較的“區分大小寫”(盡管實際上並不那么簡單)。
比較屬性值時,服務器(和客戶端)必須使用匹配規則。
對於 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.