Jump to content

LDAP Benutzer Kennwort vergleichen

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();

	}


}

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
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

Diesen Beitrag teilen


Link zum Beitrag
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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nimm an der Diskussion teil

Du kannst jetzt hier posten und Dich später registrieren. Wenn Du bereits über eine Konto verfügst, melde Dich jetzt an, um mit Deinem Konto zu posten.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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


Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung