|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Mar 2009
Messaggi: 3
|
OpenLDAP, creazione ok, autenticazione KO :(
Ciao a tutti,
ho installato OpenLDAP v 2.4.16 (l'ultima attualmente) su un OpenSolaris 10.9 (non dovrebbe centrare nulla ma metto per completezza). Il demone parte con questa semplice configurazione ________________________________ ... include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/java.schema ... pidfile /usr/local/var/run/slapd.pid argsfile /usr/local/var/run/slapd.args ... database bdb suffix "dc=customer,dc=project,dc=com" rootdn "cn=Admin,dc=customer,dc=project,dc=com" ... rootpw mypwd ... directory /usr/local/var/openldap-data ... index objectClass eq ... access to attrs=userPassword by users read by self write ________________________________ Devo creare degli utenti che poi devono autenticarsi tramite 'sto LDAP. Per fare delle prove, ho creato una semplice classe Client in Java prendendo spunto da un esempio offerto da JavaStaff.it. Usando un browser LDAP vedo gli utenti creati ma non capisco come mai non riesco a farli autenticare. Ecco cosa uso per provare. ________________________________ import javax.naming.*; import javax.naming.directory.*; import java.util.Hashtable; /** * Demonstrates how to create an initial context to an LDAP server * using simple authentication. */ class SimpleLdapClient { static String dcbase="dc=customer,dc=project,dc=com"; static String base = "ou=users,"+dcbase; static String ldapurl="ldap://10.220.22.107:389"; public static void main(String[] args) { try{ create("test"); login("test"); }catch(Exception ex){ ex.printStackTrace(); } } public static void create(String str){ Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapurl); env.put(Context.SECURITY_PRINCIPAL, "cn=Admin,"+dcbase); env.put(Context.SECURITY_CREDENTIALS, "mypwd"); try { DirContext ctx = new InitialDirContext(env); //Creazione attributi utente: Attribute objClasses = new BasicAttribute("objectclass"); objClasses.add("top"); objClasses.add("person"); objClasses.add("inetOrgPerson"); Attribute cn = new BasicAttribute("cn", str); Attribute sn = new BasicAttribute("sn", str); Attribute uid = new BasicAttribute("uid", str+"."+str); Attribute userPassword = new BasicAttribute("userPassword",str); Attributes attributi = new BasicAttributes(); attributi.put(objClasses); attributi.put(cn); attributi.put(sn); attributi.put(uid); attributi.put(userPassword); ctx.createSubcontext("cn="+str+","+base, attributi); } catch (NameAlreadyBoundException nabe){ System.err.println("DN already exists!"); nabe.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } } public static void login(String str) throws Exception{ Hashtable authEnv = new Hashtable(); String userName = str+"."+str; String dn = "uid="+userName+","+base; authEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); authEnv.put(Context.PROVIDER_URL, ldapurl); authEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); authEnv.put(Context.SECURITY_PRINCIPAL, dn); authEnv.put(Context.SECURITY_CREDENTIALS, str); try { DirContext authContext = new InitialDirContext(authEnv); System.out.println("Authentication Success!"); } catch (AuthenticationException authEx) { System.out.println("Authentication failed!"); authEx.printStackTrace(); } catch (NamingException namEx) { System.out.println("Something went wrong!"); namEx.printStackTrace(); } } } ________________________________ Come detto, la crazione va in OK (ou=users c'è xché preconfigurato con apposito semplicissimo ldif, il problema non è lì), ma l'autenticazione mi da un errore 49 LDAP: error code 49 - Invalid Credentials Qualcuno sa dirmi dove sta l'errore. Grazie in anticipo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1209
|
quindi hai gia configurato il pam nsswitch e soci no?
Hai provato a cambiare algoritmo per le password sul server ldap? Magari prova a metterle in crypt
__________________
...Ordunque... |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Mar 2009
Messaggi: 3
|
Neofita :P
Ciao... ehm... a dir la verità io ho preso OpenSolaris e installato..., compilato e installato l'OpenLDAP...
poi ho configurato lo slapd.conf come mi serviva. Caricato un ldif di default (te lo posto qua sotto) ---------------------------------------- # Organization for Corporation dn: dc=customer,dc=project,dc=com objectClass: domain objectClass: dcObject objectClass: top dc: customer # Organizational Role for administrators dn: ou=admins,dc=customer,dc=project,dc=com objectClass: top objectClass: organizationalUnit ou: admins # Organizational Role for users dn: ou=users,dc=customer,dc=project,dc=com objectClass: top objectClass: organizationalUnit ou: users ---------------------------------------- A dir la verità, se guardo con JXplorer (Borwser LDAP) un utente che o creato lui mi fa vedere la pwd "test" come "****" ovviamente ma mi aspettavo ci fossero tutta una serie di asterischi in più (SHA-1 + HASH)... Mi sa che il problema è che il mio cavolo di server non critta la pwd in scrittura.. ma forse me la critta quando viene spedita. Ho provato a installare l'OpenLDAP anche sul notebook WinXP che uso e il problema mi rimane. Mi spieghi come funziona la gestione delle pwd in OpenLDAP e caso mai come fare a dirgli di usare come algoritmo SHA1? Per poter far si che i miei utenti possano modificarsi la pwd l'ACL qua sotto è OK? Tnx access to attr=userPassword by self write by * auth |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1209
|
ma il tuo server almeno ci prova ad autenticarsi con ldap? non so se opensolaris e' gia' configurato di default per autenticarsi anche su ldap.... In genere non lo sono...
Se non hai idea di come andar a guardare... almeno puoi provare a vedere sui log di openldap se il tuo server gli manda le query. Basta che individui il file di log degli accessi su openldap e poi provi un'autenticazione, se sui log degli accessi appare qualcosa allora almeno sai che il tuo server ci sta provando. Una volta che sai che il tuo server sta provando davvero a autenticarsi con ldap allora dopo vedi se non ti funziona per il modo in cui sono ccriptate le password. La crittatura della password in genere la trovi dove configuri le password policy(cioe' scadenze, composizione etc..)
__________________
...Ordunque... |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jan 2006
Messaggi: 236
|
Scusami come hai installato openldap??
Da sorgente, da pacchetto, con i berkeleyDB, ecc..?? Io ho installato da sorgenti il berkeley ed openldap. Ti do un suggerimento, usa come browser ldap "ldapbrowser", è scritto in java ed è multipiattaforma. Ma la macchina è configurata sotto ldap? Cioè un conto è configurare ldap, un conto e la macchina sotto ldap, un altro sono gli utenti.... Ultima modifica di Tony Lio : 13-08-2009 alle 07:40. Motivo: zeroconf |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Mar 2009
Messaggi: 3
|
Precisazioni
Ciao...
ho installato openldap 2.4.16 da sorgenti openldap.org, instalando da sorgente il berkeley (da oracle). Premesso questo io non voglio usare ldap per autenticare qli utenti del server, ma per gestire le autenticazini di una web application. Non integro nss e ldap. ldapbrowser lo conosco... ma io invece mi trovo più comodo con l'altro (gusti...) Mi piacerebbe sapere se e quando devo mandargli le pwd crittate... o se si arrangia lui Queste le mie ACL: premetto però che se creo le pwd me le scrive e quindi non dovrebbe essere un problema di scrittura (anche se il rootdn puo fare ciò che vuole) access to attr=userPassword by dn="cn=Admin,dc=customer,dc=project,dc=com" write by self write by * auth access to * by dn="cn=Admin,dc=customer,dc=project,dc=com" write by users read by self write by * read ti tnx |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jan 2006
Messaggi: 236
|
Beh scusami se parli di web app l'autenticazione la devi demandare a lei.
Openldap non sa scoprire se l'autenticazione è in chiaro o è cifrata ![]() E' la tua web app che deve avere, nel deploy, il dn di ricerca degli utenti e il matching delle password su ldap. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1209
|
Infatti non avevo capito neanche io che ldap ti serviva x un sito web.. Io pensavo all'autenticazione del sistema...
Ma io dico.. ma con un bel database tipo mysql per un web nn e' la miglior cosa? Sta cosa di integrare web ldap e altro l'ha inventata gente come quelli di microsoft.. Santa pazienza.. Buona fortuna.. Chissa i dati dov'e li metti...
__________________
...Ordunque... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:23.