Аутентификация LDAP из.NET с использованием Proxy User
Мы хотим использовать "прокси-пользователя" для подключения к серверу 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")
2 ответа
Я закончил тем, что создал еще один DirectoryEntry, который был пользователем, который пытался пройти аутентификацию следующим образом:
Dim authEntry As DirectoryEntry
authEntry = New DirectoryEntry(LDAPServer, UserName, Password)
Dim authObj = authEntry.NativeObject
Если это вызывает исключение, пользователь не смог пройти аутентификацию.
Код, который я использовал в прошлом, пытается привязаться к 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