2008-08-27 10 views

Respuesta

8

Puede usar algunos hacks para autenticar solamente.

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 

Si el usuario no es válido, la entrada de directorio NativeObject no se puede acceder y lanza una excepción. Si bien esta no es la forma más eficiente (las excepciones son malas, bla, bla, bla), es rápido y sin dolor. Esto también tiene la gran ventaja de trabajar con todos los servidores LDAP, no solo con AD.

+2

nunca deberías detectar TODAS las excepciones como esa ... COMException es lo que se lanzará cuando no puedas acceder al servidor LDAP, así que eso es lo que estarías atrapando. –

16

Parece que .NET 3.5 agregó un nuevo espacio de nombres para tratar este problema - System.DirectoryServices.AccountManagement. Ejemplo de código es el siguiente:

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 

El espacio de nombres también parece proporcionar una gran cantidad de métodos para la manipulación de una cuenta de dominio (el cambio de contraseñas, que expira contraseñas, etc).

Cuestiones relacionadas