2008-08-27 54 views

回答

8

你可以使用一些黑客来验证只。

Try 
    Dim directoryEntry as New DirectoryEntry("LDAP://DomainController:389/dc=domain,dc=suffix", "username", "password") 
    Dim temp as Object = directoryEntry.NativeObject 
    return true 
Catch 
    return false 
End Try 

如果用户无效,则无法访问目录条目NativeObject并引发异常。虽然这不是最有效的方式(例外是邪恶的,等等等等),但它是快速和无痛的。这也具有与所有LDAP服务器一起工作的超酷优势,而不仅仅是AD。

+2

你应该永远不会捕获所有这样的异常......当你无法访问LDAP服务器时会抛出COMException,所以这就是你将要捕获的东西。 – 2011-01-06 04:29:02

16

看来,.NET 3.5添加了一个新的命名空间来处理这个问题 - System.DirectoryServices.AccountManagement。码样本低于:

Private Function ValidateExternalUser(ByVal username As String, ByVal password As String) As Boolean 
    Using context As PrincipalContext = New PrincipalContext(ContextType.Domain, _defaultDomain) 
     Return context.ValidateCredentials(username, password, ContextOptions.Negotiate) 
    End Using 
End Function 

的命名空间也似乎用于操纵域帐户(改变密码,到期的口令等)提供了很多方法。