代码之家  ›  专栏  ›  技术社区  ›  John Christensen

使用System.DirectoryServices验证域用户

  •  7
  • John Christensen  · 技术社区  · 16 年前

    给定域用户的用户名和密码,以编程方式验证该用户的最佳方式是什么?

    2 回复  |  直到 6 年前
        1
  •  17
  •   John Christensen    16 年前

    似乎.NET3.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
    

    命名空间似乎还提供了许多操作域帐户的方法(更改密码、过期密码等)。

        2
  •  9
  •   volley    16 年前

    你可以用一些技巧 认证 只有。

    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服务器一起工作,而不仅仅是与广告一起工作。

    推荐文章