Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Autenticazione LDAP

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    28

    Autenticazione LDAP

    Ciao a tutti,
    mi trovo a "litigare" con una classe per la semplice autenticazione ldap (true o false).
    Premetto che, ovviamente, i dati che immetto sono esatti, l'indirizzo del server è corretto, ho già cercato soluzioni praticamente ovunque.
    Il codice è questo:

    codice:
    public class jcInterrogaLDAP {
    
        public boolean InterrogaLDAP(String usr, String psw) {
            boolean blLdapVerify = false;
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://atmdc03:389");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, "cn=" + usr + ",conn");
            env.put(Context.SECURITY_CREDENTIALS, psw);
            try {
                System.out.println("InterrogaLDAP - inizio autenticazione");
                DirContext authContext = new InitialDirContext(env);
                System.out.println("InterrogaLDAP - server risponde");
                // Authentication OK
                blLdapVerify = true;
                authContext.close();
            } catch (AuthenticationException authEx) {
                authEx.getMessage();
                // Authentication failed
                System.out.println("InterrogaLDAP - autenticazione fallita");
                blLdapVerify = false;
            } catch (NamingException namEx) {
                namEx.getMessage();
                // Something went wrong 
                System.out.println("InterrogaLDAP - qualcosa è andato storto");
                blLdapVerify = false;
            }
            return blLdapVerify;
        }
    }
    Il problema è che esce sempre per "Autenticazione fallita". Non so più cosa fare.
    Qualcuno ravvisa qualche errore ?
    Grazie
    Massimo

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    dei messaggi custom te ne fai poco: quando viene sollevata un'eccezione, soprattutto in fase di progettazione e debug, il messaggio deve essere riportato esattamente per intero, altrimenti non capirai mai quale sia il vero problema. In altre parole:
    codice:
    catch (AuthenticationException authEx) {
      // Authentication failed            
      System.out.println("InterrogaLDAP - autenticazione fallita");
      authEx.printStackTrace();
      blLdapVerify = false;
    }
    catch (NamingException namEx) {
      // Something went wrong 
      System.out.println("InterrogaLDAP - qualcosa è andato storto");
      namEx.printStackTrace();
      blLdapVerify = false;
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    28
    Sì lo so, li ho messi soltanto per capire dove usciva l'eccezione...
    In genere faccio così poi quando tutto funziona li tolgo, quello che non riesco a capire è perchè nonostante i dati siano giusti, il server ldap risponde picche; comunque non escono eccezioni, è come se tutto funzionasse ma l'utente non viene riconosciuto.
    Massimo

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bhè, se con il tuo sistema scriveva autenticazione fallita eccome se viene sollevata un'eccezione: posta qui lo stacktrace
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Logga sempre questo tipo di eccezioni (anche non sullo std.err)

    codice:
     try {
                System.out.println("InterrogaLDAP - inizio autenticazione");
                DirContext authContext = new InitialDirContext(env);
                System.out.println("InterrogaLDAP - server risponde");
                // Authentication OK
                blLdapVerify = true;
                authContext.close();
            } catch (AuthenticationException authEx) {
                authEx.printStackTrace(); // fai in modo di tracciarlo qui o su file
                // Authentication failed
                System.out.println("InterrogaLDAP - autenticazione fallita");
                blLdapVerify = false;
            } catch (NamingException namEx) {
                namEx.printStackTrace();
                // Something went wrong 
                System.out.println("InterrogaLDAP - qualcosa è andato storto");
                blLdapVerify = false;
            }
    esegui con questo e dicci che succede
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    28
    Hai ragione...
    Eccoti lo stacktrace:

    codice:
    javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 525, v893]
    	at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3041)
    	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
    	at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2789)
    	at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2703)
    	at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293)
    	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
    	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
    	at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
    	at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
    	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
    	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    	at javax.naming.InitialContext.init(InitialContext.java:223)
    InterrogaLDAP - inizio autenticazione
    	at javax.naming.InitialContext.<init>(InitialContext.java:197)
    	at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
    	at jcn.jcInterrogaLDAP.InterrogaLDAP(jcInterrogaLDAP.java:38)
    	at jgp.jcLoginUtente.VerificaLDAP(jcLoginUtente.java:54)
    	at jgp.jcLoginUtente.LoginUtente(jcLoginUtente.java:29)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1805)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    	at java.lang.Thread.run(Thread.java:619)
    Grazie
    Massimo

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    primo result di una ricerca su google con il tuo error code
    RTFM Read That F*** Manual!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    28
    Valia,
    Ho letto il thread che mi hai inviato da quanto ho capito ho scritto così:

    codice:
    env.put(Context.SECURITY_PRINCIPAL, usr + "@corp." + "i.atm.to.it" + ".com");
    Ma mi da sempre lo stesso errore, ho interpretato bene ?
    Grazie
    Massimo

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    28
    Dopo innumerevoli prove ho scoperto che funziona così:

    codice:
        public boolean InterrogaLDAP(String usr, String psw) {
            boolean blLdapVerify = false;
            String stSecurityPrincipal = usr + "@dominio";
            Properties env = new Properties();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://atmdc03:389");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, stSecurityPrincipal);
            env.put(Context.SECURITY_CREDENTIALS, psw);
    Grazie di tutto.
    Ciao
    Massimo

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.