2

「プロキシユーザー」を使用してLDAPサーバー(Active Directory、Novellなど)に接続し、アプリケーションにログインしようとしているユーザーが受け入れ可能なユーザー名とパスワードを入力していることを確認します。LDAPに接続するためのコードは問題なく取得できましたが、ユーザー名とパスワードを確認する方法がわかりません。LDAPクエリを介してこれを行うことができますか?

これまでの私のコードの本質は次のとおりです。

Public Function Authenticate(ByVal UserName As String, ByVal Password As String)

  Dim LDAPServer As String = ConfigurationManager.AppSettings("LDAPServer")
  Dim proxyUsername As String = ConfigurationManager.AppSettings("LDAPProxyUser")
  Dim proxyPassword As String = ConfigurationManager.AppSettings("LDAPProxyPassword")

  Dim entry As DirectoryEntry

  entry = New DirectoryEntry(LDAPServer, proxyUsername, proxyPassword)

  'This performs the LDAP authentication'
  Dim obj As Object = entry.NativeObject

  Dim search As New DirectorySearcher(entry)
  search.Filter = String.Format("(SAMAccountName={0})", UserName)

  'How do I check the password now?'

  Dim result As SearchResult = search.FindOne()

  If result Is Nothing Then Throw New Exception("Unable to find SAMAccountName")
4

2 に答える 2

1

過去に使用したコードは、提供された資格情報を使用して LDAP にバインドしようとします。bind の呼び出しで例外がスローされた場合は、有効なユーザーがありません。

Dim servers() As String = New String(0) {"mylap.domain.com"}
Dim con As New LdapConnection(New LdapDirectoryIdentifier(servers, True, False))
con.SessionOptions.SecureSocketLayer = True
con.Credential = New Net.NetworkCredential("cn=" & userName, password)
con.AuthType = AuthType.Basic

Using con
   con.Bind()
End Using
于 2010-02-03T19:21:49.340 に答える
0

次のように認証しようとしていたユーザーである別の DirectoryEntry を作成することになりました。

Dim authEntry As DirectoryEntry

authEntry = New DirectoryEntry(LDAPServer, UserName, Password)

Dim authObj = authEntry.NativeObject

これが例外をスローする場合、ユーザーは認証に失敗しました。

于 2010-02-04T18:13:11.637 に答える