# LDAP-Anbindung mit Java



## freek0815 (26. April 2008)

Hallo,

ich hab folgendes Problem. Ich möchte mit Java verschiedene Informationen von LDAP abrufen, also beispielsweise die cn, uid, fullname, ....
Kann ich auch das Userpasswort eines eingetragenen Mitarbeiters von LDAP in Java abrufen? Dieses müsste ja irgendwie gekennzeichnet sein, also {MD5}passwort oder {SHA1}passwort. Ich finde aber keinen Eintrag im LDAP-Browser. Funktioniert das mit anonymem Binding oder muss ich mich dazu als Admin angemeldet sein? Oder ist es überhaupt nicht möglich das Passwort von LDAP abzurufen?

Ein bisschen Quellcode würde mir sehr weiterhelfen. Vielen Dank


----------



## Oliver Gierke (27. April 2008)

http://www.springframework.org/ldap
http://static.springframework.org/spring-ldap/docs/1.2.1/reference/

REINHAUN!


----------



## will2k (28. April 2008)

freek0815 hat gesagt.:


> Hallo,
> 
> ich hab folgendes Problem. Ich möchte mit Java verschiedene Informationen von LDAP abrufen, also beispielsweise die cn, uid, fullname, ....
> Kann ich auch das Userpasswort eines eingetragenen Mitarbeiters von LDAP in Java abrufen? Dieses müsste ja irgendwie gekennzeichnet sein, also {MD5}passwort oder {SHA1}passwort. Ich finde aber keinen Eintrag im LDAP-Browser. Funktioniert das mit anonymem Binding oder muss ich mich dazu als Admin angemeldet sein? Oder ist es überhaupt nicht möglich das Passwort von LDAP abzurufen?
> ...



Ich hab mal ne Praktikumsarbeit über LDAD(JNDI) + Windows2000 geschrieben und soweit ich mich noch erinnere geht 1. das ändern des PW nur mit SSL verbindung und admin rechte, das lesen geht nicht da verschlüsselt, du bekommst es in Reinform nicht raus. Am Besten du gehst nach sun java forum ins JNDI subforum,  da gibt es zumind. einen sehr kompetenten User ;-) (nicht ich... LOL)

so ändere ich z.B. ein Passwort (codeauszug...):

```
Properties propsPassword = new Properties(); 
		  homepath = System.getProperty("java.home");
		  String keystore = homepath + "/lib/security/ZertifikatBerlin";		   
		  System.setProperty("javax.net.ssl.trustStore",keystore);
		 
		  // Die Methode put der Klasse Hashtable weist die rechten Werte (Stings hier) einen Schlüssel zu (verschiedene Kontexte hier)
		  propsPassword.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
		  propsPassword.put(Context.REFERRAL,"follow"); // verursacht Fehler mit W2K
		  propsPassword.put(Context.PROVIDER_URL,"ldaps://rhein:636");	  
		  propsPassword.put(Context.SECURITY_PROTOCOL,"SSL");
		  propsPassword.put(Context.SECURITY_AUTHENTICATION, "simple");
		  propsPassword.put(Context.SECURITY_PRINCIPAL, adminUser);
		  propsPassword.put(Context.SECURITY_CREDENTIALS,adminPassword); 		  	 
	  		  
		  try
		  {   
			  DirContext ctxPass = new InitialDirContext(propsPassword);
			  
			  // Wert für das Kenntwort in der Activev Directory erzeugen				
			  String neuesKennwortAD = "\"" + neuesKennwortTemp + "\"";
			  byte[] newpassword = neuesKennwortAD.getBytes("UTF-16LE");
			  	
			  // The username to be used for the password change	    		  
			 	
			  ModificationItem mods[] = new ModificationItem[1]; 
			  mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd", newpassword));
			  ctxPass.modifyAttributes(benutzernameRichtig,mods);    	  
			  
			  JOptionPane.showMessageDialog(frame,"Passwort von Benutzer: " + benutzername + " wurde geändert!","Bestätigung Ihrer Passwortänderung",JOptionPane.PLAIN_MESSAGE);
      		  	
			  ctxPass.close();
			  fehlerNachrichtTF.setText("");
		    } 
	  	 
		   catch (Exception er)
			{    		 
			  fehlerNachrichtTF.setText(er.toString());
			}
```

Ich habs damals mit JNDI gemacht, doch heute wenn du genug Zeit hast, würde ich dir raten Spring ldap zu benutzen ;-)


----------

