Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    OpenLDAP via Java, problemi di autenticazione

    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 questo portale. 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.s un.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. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    mmm...non mi ritrovo tantissimo con le concatenazioni che hai fatto...
    però mi sembra che non sia specificato il suffix nell'accesso al server...

    una cosa come:

    authEnv.put(Context.PROVIDER_URL, ldapurl+"/"+"dc=customer,dc=project,dc=com");

    ma non ci giurerei (come t'ho detto non mi ritrovo molto che le concatenazioni che messo...)
    spero possa servire,
    ciao
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  3. #3

    Purtroppo il problema non è di quel tipo

    Ciao, grazie, piurtroppo il problema non è di quel tipo...

    Mettiamola così... non capisco come lpdap gestisca le pwd.

    In creazione la passo in chiaro... lui se la critterà con SHA (credo vedendo cosa ci mette).

    In autenticazine che devo passargli? sempre la pwd in chiaro o cosa (hash della pwd crittata con algoritmo?)

    Aspetto newz. tnx

  4. #4
    Ho il tuo stesso problema in quanto inserisco la pssword in chiaro e quando vado a leggerla (tutto sempre tramite java)mi ritorna una stringa del tipo "[B@12b3374" ma se apro un browser LDAP la vedo in chiaro.
    Tu hai risolto?
    Grazie Ciao

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Estratto dal Regolamento, al punto 6:

    Formattazione del codice sorgente.
    Quando incollate una porzione di codice all'interno di un messaggio, utilizzate l'apposito tag
    [CODE]
    codice
    [/CODE]
    che può essere inserito automaticamente premendo il pulsante CODE: questo renderà il codice leggibile e facilmente comprensibile a tutti, agevolando gli utenti che desiderano aiutarvi.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da carlitos081
    Ho il tuo stesso problema in quanto inserisco la pssword in chiaro e quando vado a leggerla (tutto sempre tramite java)mi ritorna una stringa del tipo "[B@12b3374" ma se apro un browser LDAP la vedo in chiaro.
    Tu hai risolto?
    Grazie Ciao
    Se è questo il problema mi paer evidente che non ritorna una stringa, ma un array di qualcosa (un array di caratteri forse?). Quando la rappresentazione stringa di un oggetto comincia con la quadra si tratta (quasi) sempre di un array...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7

    Niente di nuovo sul fronte digitale

    Purtoppo nn sono ancora riuscito a caprici nulla...

    Ad un mio collega, che lavora allo stesso progetto, non si sa come funziona (lo stesso ldap!!). Ho copiato il suo codice nei miei metodi (x una libreria) ma niente.

    prutroppo non ho trovato nessun esempio di creazione e poi autenticazione per capire come funzia ... boh...


  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Probabilmente ci sono delle configurazioni del tuo server LDAP che forzano la criptatura (per questioni di sicurezza) delle password inserite (verifica su .conf del tuo server).

    se può aiutarti: http://www.openldap.org/faq/data/cache/1347.html
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  9. #9

    Eureka

    Risolto!

    in fase di creazione passo l'attributo userPassword in formato hash usando l'SHA-1, ovvero usando l'oggetto MessageDigest con algoritmo SHA-1. Poi in fase di autenticazine (new InitialDirContext(...)) passo Context.SECURITY_CREDENTIALS in chiaro
    Codice per hashing
    codice:
    public static String digest(String string,int alg) throws UnsupportedEncodingException, NoSuchAlgorithmException
        {
            if (string == null || string.equals("")) { return string; }
            byte[] bytePlainString = string.getBytes("UTF8");
            MessageDigest messageDigest = MessageDigest.getInstance(algs[alg]);
            messageDigest.update(bytePlainString);
            String encodedString = Base64.encodeBytes(messageDigest.digest());
            return encodedString;
        }
    Nella classe LDAPTool avrò quindi... (parte del code che interessa la discussione)
    codice:
    	public static void initialize(String dnbase,String ldapurl,String ldapadmin,String ldappwd){
    		basedn=dnbase.trim();
    		ldapURL=ldapurl;
    		ldapAdminDN=ldapadmin;
    		ldapAdminPWD=ldappwd;
    		objClasses =  new BasicAttribute("objectclass");
    		objClasses.add("top");
    		objClasses.add("person");
    		objClasses.add("inetOrgPerson");
    	}
    	private static DirContext getInitialDirContext(String ldapUser,String ldapPwd) throws NamingException{
    		Hashtable<String,String> env = new Hashtable<String,String>();
    		env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCTX);
    		env.put(Context.PROVIDER_URL, ldapURL);
    		env.put(Context.SECURITY_AUTHENTICATION, ldapAUTH);
    		env.put(Context.SECURITY_PRINCIPAL, ldapUser);
    		env.put(Context.SECURITY_CREDENTIALS, ldapPwd);
    		log.debug("Try connect to "+ldapURL);
    		log.debug("ldapUser "+ldapUser);
    		log.debug("ldapPwd "+ldapPwd);
    		return new InitialDirContext(env);
    	}
    	
    	private static String getLdapUserDN(Attributes attrs) throws NamingException{
    		return "cn="+attrs.get("cn").get().toString()+","+basedn;
    	}
    	
    	public static boolean authenticateUser(String uid, String pwd) throws Exception {
    	    //String DN_CUSTOMER;
    		boolean retVal = false;
    		String ldapUserDN = "cn="+uid+","+basedn; 
    		String ldapUserPW = pwd;
    		try	{
    			DirContext ctx = getInitialDirContext(ldapUserDN,ldapUserPW);
    			ctx.close();
    			log.debug("Autenticated User!");
    			retVal = true;
    		} catch (AuthenticationException authEx) {
    			log.error("Authentication failed!",authEx);
    			throw authEx;
    		} catch (Exception e)	{
    			log.fatal("Unable to connect LDAP ("+ldapURL+"): ",e);
    			throw new Exception("Unable to connect LDAP ("+ldapURL+"): ",e);
    		}
    		return retVal;
    	}
    	
    	public static void createUser(Map<String,String> ldapUserAttributes,Map<String,String> pwdattr) throws Exception {
    		Attributes attributes = new BasicAttributes();
    		//Atributi classes:
    		attributes.put(objClasses);
    		//Attributi utente:
    		for(String key:ldapUserAttributes.keySet()){
    			attributes.put(new BasicAttribute(key,ldapUserAttributes.get(key)));
    		}
    		for(String key:pwdattr.keySet()){
    			attributes.put(new BasicAttribute(key,"{SHA}"+CryptUtility.digest(pwdattr.get(key),CryptUtility.SHA1)));
    		}
    		
    		String ldapUserDN = getLdapUserDN(attributes);
    		
    		try{
    			DirContext ctx = getInitialDirContext(ldapAdminDN,ldapAdminPWD);
    			//creazione dell'utente 
    			ctx.createSubcontext(ldapUserDN, attributes);
    			ctx.close();
    			log.debug("User created!");
    		}
    		catch (NameAlreadyBoundException nabe){
    			log.error("UserDN already exixsts ",nabe);
    			throw nabe;
    		}
    		catch (Exception e){
    			log.error(e);
    			throw e;
    		}
    	}
    Grazie infinite a tutti per la pazienza e il tempo dedicato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.