使用System.DirectoryServices验证域用户
时间:2020-03-05 18:44:01 来源:igfitidea点击:
给定域用户的用户名和密码,以编程方式验证该用户的最佳方法是什么?
解决方案
回答
我们只能使用一些技巧来进行身份验证。
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)一起使用,这也具有超酷的优势。
回答
似乎.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
命名空间似乎还提供了许多用于操纵域帐户的方法(更改密码,使密码过期等)。