Mit diesem Code lese ich aus LDAP die User und Passwörter aus.
Das Problem ist aber das die Passwörter verschlüsselt sind ?
Wie schafe ich es nun dieses Passwort Notes gerecht im Domino Directory (HTTP Password)
bei dem jeweiligen User zu speichern. Primär geht es darum das das Passwort in LDAP Verschlüsselt
ist und ich nicht weis wie ich es entschlüssle um es dann mit Notesmethoden wieder zu verschlüsseln.
import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.*;
public class JavaAgent extends AgentBase {
// initial context implementation
public static String initctx = "com.sun.jndi.ldap.LdapCtxFactory";
public static String host =
public static String mgr_DN =
public static String mgr_PW =
public static String searchBase = "ou=personen";
public static String filter = "(uid=xxx)";
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
try {
//Hashtable for environmental information
Hashtable env = new Hashtable();
//Specify which class to use for the JNDI provider
env.put(Context.INITIAL_CONTEXT_FACTORY, initctx);
//Specify host and port to use
env.put(Context.PROVIDER_URL, host);
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,mgr_DN);
env.put(Context.SECURITY_CREDENTIALS,mgr_PW);
//Get a reference to a directory context
DirContext ctx = new InitialDirContext(env);
//Scope of the search:
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
//Perform the search:
NamingEnumeration results = ctx.search(searchBase,filter,constraints);
//Analyse the results
if (!results.hasMore()) {
System.out.println("Nothing found.");
} else {
while (results.hasMore()) {
SearchResult sr = (SearchResult) results.next();
System.out.println(sr.getName());
Attributes attrs = sr.getAttributes();
if (attrs == null) {
System.out.println("No attributes");
} else {
for (NamingEnumeration ae = attrs.getAll(); ae.hasMore();) {
Attribute attr = (Attribute) ae.next();
String id = attr.getID();
//For each value of the attribute:
for (Enumeration vals = attr.getAll();
vals.hasMoreElements();
System.out.println(" "+id + ": "+ vals.nextElement()));
System.out.println("+++++++++++++++++++++++++++++++");
System.out.println("sn: " + attrs.get("sn").get());
if (attrs.get("userPassword") != null){
System.out.println("pw: " + attrs.get("userPassword").get().toString());
}
else
System.out.println("pw: not Found !");
}
}
}
}
ctx.close();
}
catch (Exception e) {
// Handle any types of exceptions.
System.err.println(e.getMessage());
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Hi Arcon,
ich glaube, das musst du der Dokumentation deines LDAP-Servers entnehmen.
Es kann ja nicht sein, dass es in jndi (javax.naming.*) irgendwo eine Klasse mit der Methode
String brauchstDuEntschluesseltesPasswortIchGebeDir(String verschluesseltesPasswort)
Was du willst ist Single Sign On. (SSO). Vielleicht hilft es, wenn du das mal als Suchbegriff gegen die Doku deines LDAP-Server laufen lässt oder gegen Google.
Ich weiss das Tivoli hierfür ein mächtiges Produkt hat, aber das ist sicher nicht billig.
Gruß Axel
gibt
ich vermute, du benutzt openLDAP?
Das ganze hat nicht unbedingt was mit JNDI zu tun. Es ist vielmehr openLDAP (oder welchen LdAP-Server du auch immer benutzt) spezifisch. JNDI ist nur eine abstrakte Schnittstelle.
MD5 ist ein Verschlüsselungs-Algorythmus, aber den benutzt du ja nur. Du mußt kein Verschlüsselungs-Algorythmus-Hacker werden. Du mußt nur einen Weg finden wie du die ganze Infrastruktur benutzt.
Ich selbst habe (leider) noch nicht mit JNDI ausserhalb von ein paar absoluten Basic-Sachen im Kontext von APP-Servern gearbeitet.
Hier findest du vielleicht ein paar Hinweise:
http://www.google.de/search?q=JNDI+openLDAP+Password&ie=UTF-8&oe=UTF-8&hl=de&meta=
Durchsuch einfach die zurückgelieferten Treffer nach "Password" mit der Browsersuche.
Es ist natürlich vom Sicherheitsstandpunkt aus völig ok, dass man nicht einfach mit einem Programm Passwörter auslesen kann.
Dies hier läßt darauf schliessen, dass es sehr wohl von Einstellungen in openLDAP abhängt, wie man von JNDI aus mit Passwörtern arbeiten kann:
Finally, we specify the password to be used by this rootdn. Please note that by default, the password is stored in plain text in the configuation file. This is fine for testing purposes, but be sure to read the OpenLDAP manual for detailed information regarding the use of encrypted passwords.
von: http://www.cris.com/~adhawan/tutorial/
Gruß Axel