2017-02-13 1 views
1


    In meiner Anwendung verwende ich LDAP Bind Authentifizierungsmechanismus. Ich erhalte häufig eine Ausnahme für die Authentifizierung, selbst wenn einer nicht übereinstimmt (Benutzername oder Kennwort).
    Ich möchte Fehlermeldung entweder Benutzername ist nicht übereinstimmend oder Passwort nicht übereinstimmen. Derzeit ist es mit AuthenticationException nicht möglich, die richtigen Details zu erhalten.LDAP/AD - So ermitteln Sie, ob Benutzername oder Kennwort nicht übereinstimmen

Wird eine vorhandene API helfen? oder müssen Sie über die API abfragen?

Vielen Dank im Voraus.

Antwort

0

Wenn Benutzer Benutzername und Kennwort für die Authentifizierung angeben, empfiehlt es sich, ihnen nicht den genauen Grund zu nennen, warum eine Anmeldung nicht erfolgreich war. Sie sagen ihnen immer, dass es einen Unterschied zwischen Benutzername und Passwort gibt, so dass ein Angreifer nicht erfährt, ob ein bestimmter Benutzername existiert.

+0

Ich bin nicht zeigt, die man in der Benutzeroberfläche falsch ist, aber mein Code benötigt, welches ist Mismatch entweder Benutzername oder das Passwort –

0

Ich stimme zu, dass die beste Praxis ist nicht, den Grund zu sagen.

-

Aber wenn Sie es zu tun haben, egal was:

eine search mit dem Nickname tun, um zu überprüfen, ob der Benutzername vorhanden ist. Wenn es nicht existiert, ist es ein Fehler.

Wenn ein Benutzer vorhanden ist und weiterhin authentifiziert wird, aber Sie AuthenticationException erhalten, handelt es sich um ein falsches Kennwort.

-

Edit:

If(checkUserExists(username)){ 
    //construct the hashtable environment 
    //... 
    ht.put(Context.SECURITY_PRINCIPAL, username); 
    ht.put(Context.SECURITY_PRINCIPAL, password); 
    //... 
    try { 
     localLdapContent = new InitialLdapContext(ht, null); 
    } catch (Exception e) { 
     //suppose it's a wrong password 
    } 
}else{ 
    //error user doesn't exist 
} 

Sie benötigen eine andere LDAP-Verbindung mit der Erlaubnis Benutzer für alle Anforderungen zu überprüfen.

boolean checkUserExists(String username) { 
    //... 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_username); 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_password); 
    //... 
    adminconn = new InitialLdapContext(ht_administrator, null); 
    return adminconn.search(
     "uid="+username+",ou=people,dc=example,dc=com", "(objectclass=*)", searchControls 
    ).hasMore(); 
} 
+0

Können Sie bitte teilen Sie Java-Code für Ihre Kommentare –

+0

ich habe nicht globalen Kontext zu verstehen. Ist es möglich, die Benutzer-ID abzufragen, ob sie existiert oder nicht, ohne ein Passwort anzugeben (Handshake des LDAP-Servers)? –

+0

Sie können 'new InitialLdapContext' mit Administrator-Benutzernamen und Passwort für die Suche einfach instanziieren. – cshu

0

Die returned error codes von Microsoft Active Directory bieten diese Informationen.

"Die Ausnahme ist [LDAP: Fehlercode 49 - 80090308: LdapErr: DSID-0Cxxxxxx, Kommentar: AcceptSecurityContext Fehler, Daten, vece]."

Die Datenwerte informieren über das Problem.

+0

Für beide Benutzernamen und Passwort nicht übereinstimmen, bekomme ich die gleiche Fehlermeldung "javax.naming.AuthenticationException: [LDAP: Fehlercode 49 - 80090308: LdapErr: DSID-0C090334, Kommentar: AcceptSecurityContext Fehler, Daten 52e, vce " –

+0

ist Gibt es eine Möglichkeit, die Benutzer-ID abzufragen, existiert oder nicht, ohne ein Passwort zu geben (Hand schütteln den LDAP-Server)? –

Verwandte Themen