Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

LDAP Benutzer Kennwort vergleichen

Empfohlene Antworten

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

	}


}


//benutzername

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

versuchs beim benutzernamen mal nur mit "Stefan Poersel".

sonnst kann ich keinen fehler finden.

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

  • Autor
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

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.