LDAP-Benutzer-Passwort-Authentifizierung mithilfe von JNDI
public static void main(String[] args)
{
String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
String MY_HOST = "ldap://Localhost:1389";
String MGR_DN = "cn=John,ou=Users,o=IT,dc=QuizPortal";
String MGR_PW = "password";
//Identify service provider to use
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);
env.put(Context.PROVIDER_URL, MY_HOST);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, MGR_DN);
env.put(Context.SECURITY_CREDENTIALS, MGR_PW);
try
{
//Create the initial directory context
InitialDirContext initialContext = new InitialDirContext(env);
System.out.println("Context Sucessfully Initialized");
}
catch(Exception e)
{
System.err.println(e);
}
}
Ich würde gerne Fragen, wenn ich die MGR_DN = "cn=John,ou=Users,o=IT,dc=QuizPortal"
zu MGR_DN = "uid=103,ou=Users,o=IT,dc=QuizPortal"
. Im Grunde Wechsel von cn uid, würde ich auf einen Fehler stoßen
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
Bin ich authentifiziert, wenn angegeben ist, wie cn=John
aber nicht uid=103
. Bin ich nicht angeben dürfen, durch die uid?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die DN oder " distinguished name. Das ist der name, den die Benutzer gebunden ist, als in dem Verzeichnis. Sie können nicht nur wählen Sie eine beliebige Kette von Parametern. Wenn Ihre Benutzer gebunden sind, die über die " cn "- Attribut dann nur die " cn " - Attribut ist Teil des DN.
Wenn Sie nicht wissen, die genaue DN im Voraus, sollten Sie eine Suche im LDAP-Verzeichnis zuerst. Diese kann getan werden, mehr oder weniger wie folgt (stellen Sie sicher, fangen die entsprechenden Ausnahmen):
Hier, die Suche filter ist
"(&(cn=" + identifier + "))"
(so zum Beispiel(&(cn=John))
), aber man könnte dieuid
statt. Die Eindeutigkeit der Ergebnisse hängt von der Konfiguration des LDAP-Servers. Der Basis-DN hängt auch von der Art der Einrichtung (es könnte seinou=Users,o=IT,dc=QuizPortal
in deinem Beispiel).ou=Marketing
undou=Finances
zum Beispiel), mituid=user1,ou=Marketing,o=MyCompany
unduid=user2,ou=Finances,o=MyCompany
und konfiguriert es mit eindeutige uids übero=MyCompany
finden Sie den vollständigen DN des Benutzers mituid=user1
(die Sie sich authentifizieren müssen) mit, dass die Art der Suche.ctx = new InitialDirContext(env);
bevor Siereturn true;
new InitialDirContext(env)
macht die Suche und das zweite (kurz vorreturn true
) funktioniert die Authentifizierung. Wenn die Authentifizierung fehlschlägt, es sollte eine exception werfen (und daher nicht zu erreichen wahr).Sieht es wie ein server-Konfigurations-Problem. Hier ist ein ähnliches problem inklusive Lösung. Im Grunde müssen Sie angeben, ob
uid
odercn
für die Authentifizierung inldap-authentication.properties
.