2012-12-12 124 views
1

我正在用DirectoryEntry/DirectorySearcher通过C#web应用程序对Active Directory中的用户进行LDAP身份验证(ConnectionString属性与LDAP://server.domain相同):区分大小写的LDAP查询

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)名称。因此,如果我添加名为“测试用户”的新用户,用户名可能是“tuser”,但它指定的NetBIOS名称是“TUser”。当用户输入一个用户名/密码时,“Tuser”无法被认证,而“TUser”成功。

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

回答

1

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

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

+0

我与管理Active Directory的人(以及他自己的众多客户)交谈过,他并不完全确定此评论的含义。你能澄清一下吗?在模式中定义了 – RubyHaus

+0

属性。属性定义包含语法,匹配规则和一些其他信息。 [RFC4517](http://tools.ietf.org/html/rfc4517#section-3.3.5)是权威性文档。 –

+0

由于这是一个SBS服务器,它正在运行包含OWA的Exchange。我尝试使用上面的C#代码模仿登录表单OWA,但我的区分大小写,而OWA不是。任何猜测什么是差异,为什么OWA的作品,但我的不会? – RubyHaus