Hallo zusammen,
ich möchte (naja, ich muss
) gerne eine LDAP Authentifizierung mit sAMAccountName programmieren.
Natürlich weiß ich, dass es zum Thema LDAP wahnsinnig viele Seiten, Threads und Tutorials gibt. Und ja, ich weiß wie man Google benutzt
Aber ich komm einfach nicht weiter.
So sieht meine Authentifizierung bisher aus:
Das Ganze läuft in einem ActiveDirectoryRealm, also mit Apache Shiro. Aber das sollte hier momentan keine Rolle spielen.
Mein Problem sieht wie folgt aus:
Wenn ich den String
benutze und mich mit Vorname und Nachname + Passwort anmelde funktioniert alles super.
Allerdings möchte ich mich gern mit dem "sAMAccountName" anmelden und diesen Authentifizieren. Aber da bekomm ich dann immer die Fehlermeldung, dass der User nicht gefunden worden ist:
Mit
hab ich es auch probiert, mit dem selben Ergebnis. Außerdem gibt es in unserem Active Driectory kein Attribut "uid".
Vielen Dank schon mal für die Hilfe!
Falls noch weitere Informationen benötigt werden stehe ich gerne zur Verfügung.
ich möchte (naja, ich muss

Natürlich weiß ich, dass es zum Thema LDAP wahnsinnig viele Seiten, Threads und Tutorials gibt. Und ja, ich weiß wie man Google benutzt

Aber ich komm einfach nicht weiter.
So sieht meine Authentifizierung bisher aus:
Java:
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
SimpleAuthenticationInfo info = null;
// Set up environment for creating initial context;
Hashtable<String, String> authEnv = new Hashtable<String, String>();
String userName = upToken.getUsername();
String passWord = new String(upToken.getPassword());
String ldapBaseDN = "ou=SBSUsers, ou=Users, ou=MyBusiness, dc=local";
String dn = "sAMAccountName=" + userName + ", " + ldapBaseDN;
//String dn = "cn="+userName+", "+ldapBaseDN;
authEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
authEnv.put(Context.PROVIDER_URL, "ldap://192.168.10.2:389");
authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
authEnv.put(Context.SECURITY_PRINCIPAL, dn);
authEnv.put(Context.SECURITY_CREDENTIALS, passWord);
//LDAP Authentication
DirContext authContext = null;
try {
authContext = new InitialDirContext(authEnv);
System.out.println("Authentication Success!");
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// trying to search
NamingEnumeration<SearchResult> results = authContext.search(ldapBaseDN, "(objectClass=person)", controls);
while (results.hasMore()) {
SearchResult searchResult = (SearchResult) results.next();
Attributes attributes = searchResult.getAttributes();
Attribute attr = attributes.get("cn");
String attrCN = (String) attr.get();
System.out.println(" ##### User: "+attrCN);
Attribute sAMAccountName = attributes.get("sAMAccountName");
System.out.println(" ##### sAMAccountName: "+sAMAccountName.get());
}
} catch (AuthenticationException authEx) {
System.out.println("Authentication failed!");
authEx.printStackTrace();
throw new AuthorizationException(rb.getString("login.not_allowed"));
} catch (NamingException namEx) {
System.out.println("Something went wrong!");
namEx.printStackTrace();
}
Das Ganze läuft in einem ActiveDirectoryRealm, also mit Apache Shiro. Aber das sollte hier momentan keine Rolle spielen.
Mein Problem sieht wie folgt aus:
Wenn ich den String
C:
dn = "cn="+userName+", "+ldapBaseDN;
Allerdings möchte ich mich gern mit dem "sAMAccountName" anmelden und diesen Authentifizieren. Aber da bekomm ich dann immer die Fehlermeldung, dass der User nicht gefunden worden ist:
C:
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 525, v1772
C:
dn = "uid="+userName+", "+ldapBaseDN;
Vielen Dank schon mal für die Hilfe!
Falls noch weitere Informationen benötigt werden stehe ich gerne zur Verfügung.