Zum Inhalt springen

LDAP Benutzer Kennwort vergleichen


Oortael

Empfohlene Beiträge

Hi,

ich würde gerne mit JNDI auf ein LDAP verzeichnis zugreifen, und daraus die Benutzerpasswörter des Active Directory mit denen vergleichen, die z.B. ein Benutzer über eine Form oder ein GUI eingibt.

Soweit ich das verstanden habe müsste es funktionieren, wenn ich mit einem berechtigten Acount mich mit dem LDAP server Authentifiziere, und dann einfach nur mit den Richtigen Attributen des im LDAP gespeicherten Benutzers das Passwort dem LDAP Server zum Vergleich vorschiebe. Dann bekomme ich entweder eine Exception weil es das falsche Passwort war oder nichts falls es richtig war. Soweit zur Theorie.

Noch klappt aber leider die Authentifizierung mit dem LDAP noch nicht. Bekomme immer diese Exception, sobald ich mich mit der Authentifizierungsmethode "simple" versuche:


javax.naming.AuthenticationException: [LDAP: error code 49 - Authenticated bind failed. Anonymous bind established.]

	at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:2750)

	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2696)

	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2497)

	at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2414)

	at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:258)

	at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:91)

	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674)

	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:255)

	at javax.naming.InitialContext.init(InitialContext.java:231)

	at javax.naming.InitialContext.<init>(InitialContext.java:207)

	at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:92)

	at corp.bmw.emeadecentral.nlm.ldapgrab.app.LDAPGrab.connect(LDAPGrab.java:77)

	at corp.bmw.emeadecentral.nlm.ldapgrab.test.Test.main(Test.java:19)

Exception in thread "main" 

Was hat die zu Bedeuten? So sieht der Code zur Zeit aus:

package corp.poersel.ldap;


import java.net.URL;

import java.util.Hashtable;


import javax.naming.Context;

import javax.naming.NamingEnumeration;

import javax.naming.NamingException;

import javax.naming.directory.Attribute;

import javax.naming.directory.Attributes;

import javax.naming.directory.DirContext;

import javax.naming.directory.InitialDirContext;

import javax.naming.directory.SearchControls;

import javax.naming.directory.SearchResult;


public class LDAPGrab {



	/*

	 * Wird zur Verbindung benötigt

	 */

	//k.A.

	final String FILTER_USERS="(uid=*)"; 


	//Hält benötigte Prameter

	Hashtable properties = new Hashtable();


	//LDAP Server

	private String server = "ldap.poersel";


	//LDAP Port auf dem Server

	private int port = 389;


	//LDAP URL

	private String serverURL = "ldap://" + server + ":" + port;


	//benutzername

	private String usr = "CN=Stefan Poersel,ou=people,o=family,dc=poersel,dc=com";


	//passwort

	private String pwd = "Engine";


	//

	InitialDirContext ctx = null;


	/*

	 * 

	 */

	private String searchString = "stefan"; 


	public LDAPGrab() {

		super();

	}


	public void connect() throws NamingException {


		//?

		properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");


		//url des LDAP Servers

		properties.put(Context.PROVIDER_URL, serverURL);


		/*

		 * 

		 * Identifizierung am LDAP server

		 * 

		 * "none" --> keine Authentifizierung

		 * "simple" --> mit Authentifizierung

		 * "strong" --> ??????

		 * 

		 */

		properties.put(Context.SECURITY_AUTHENTICATION, "simple");

		properties.put(Context.SECURITY_PRINCIPAL, usr);

		properties.put(Context.SECURITY_CREDENTIALS, pwd);


		//

		ctx = new InitialDirContext(properties);

		NamingEnumeration list = (NamingEnumeration) ctx.lookup("ou=family");

		System.out.println(list);



	}


	public void disconnect() throws NamingException {

		ctx.close();

	}


}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Anmeldung, durch die der LDAP Server feststellt, ob du überhaupt berechtigt bist, Operationen auf ihm durchzuführen schlägt bei dir offensichtlich fehl.

Hierzu fallen mir spontan 3 Möglichkeiten ein:

1. Der DN (CN=Stefan Poersel, ou =...) existiert auf dem Server nicht

2. Das zu diesem DN übergebene Passwort ist falsch

3. Es gibt durchaus LDAP Server, die eine unverschlüsselte Übergabe des Passwortes nicht akzeptieren. Auch das könnte zu einem entsprechenden Fehler führen.

Gruß Nils

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Anmeldung, durch die der LDAP Server feststellt, ob du überhaupt berechtigt bist, Operationen auf ihm durchzuführen schlägt bei dir offensichtlich fehl.

Hierzu fallen mir spontan 3 Möglichkeiten ein:

1. Der DN (CN=Stefan Poersel, ou =...) existiert auf dem Server nicht

2. Das zu diesem DN übergebene Passwort ist falsch

3. Es gibt durchaus LDAP Server, die eine unverschlüsselte Übergabe des Passwortes nicht akzeptieren. Auch das könnte zu einem entsprechenden Fehler führen.

Gruß Nils

1. Der DN existiert, da ich ihn mir, wenn ich mich anonym anmelde, ausgeben lassen kann.

2. Kann ich für den DN Passwörter speziell setzen, oder setzt das AD das Windows Passwort dafür?

3. Wie kann ich herausfinden, welches Verfahren der LDAP Server verwendet?

Gruß Codefiesler

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Sorry, mit dem MS ActiveDirectory kenne ich mich nicht aus, habe bisher nur mit openLDAP und ein wenig mit dem Novell E-Directory gearbeitet.

Was das setzen des Passwortes betrifft, dafür gibt es im LDAP Schema das Attribute userPassword. Versuch doch einfach mal, dich mit einem existierenden und funktionierenden LDAP Browser (findest du z.B. hier: www-unix.mcs.anl.gov/~gawor/ldap/) auf den Server zuzugreifen. Wenn das funktioniert weißt du zumindestens, dass Benutzername und Passwort OK sind.

Was die akzeptierte Üergabe von Passwörtern betrifft, kann ich dir nicht weiterhelfen. LDAP ist halt ein Protokoll, die Implementationen sind schon sehr unterschiedliche.

Gruß

Nils

Link zu diesem Kommentar
Auf anderen Seiten teilen

bist Du bei deinem Problem weitergekommen?

ich arbeite gerade auch mit JNDI und dem AD von MS.

soweit ich weiss kannst man die Passwörter nur über SSL abfragen bzw. setzen.

Ich kann mich ans AD anmelden und einen User anlegen, aber nicht sein Passwort setzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...