En esta página: Autentificación LDAP En LDAP, la información de autentificación se suministra en la operación "bind". En LDAP v2, un cliente inicia una conexión con el servidor lDAP enviando una operación "bind" que contiene la información de autentificación. En LDAP v3, esta operación sirve para el mismo propósito, pero es opcional. Un cliente que enví una petición LDAP sin hacer "bind" es tratado como un cliente anónimo (puedes ver más detalles en la página Autentificación Anónima). en LDAP v3, la operación "bind" podría enviarse en cualquier momento, posiblemente más de una vez, durante la conexión. Un cliente puede enviar peticiones "bind" en el medio de una conexión para cambiar su identidad. Si la petición tiene éxito, entonces todas las peticiones que estén en espara y que usan la vieja indentidad de la conexión serán descartadas y la conexiónes asociada con una nueva identidad. La información de autentificación suministrada en la operación "bind" depende del mecanismo de autentificación que el cliente elija. Puedes ver una explicación sobre el mecanismo de autentificación en la página siguiente. Autentificiación en LDAP usando JNDI En JNDI, la información de autentificación se especifica en propiedades de entorno. Cuando creamos un contexto inicial usando la clase InitialDirContext (o su superclase o subclase), suministramos un conjunto de propiedades de entorno, algunas de las cuales podrían contener información de autentificación. Podemos usar las siguientes propiedades de entono para especificar información de autentificación:
Cuando se crea el contexto incial, el proveedor de sevicios LDAP subyacente extrae la información de autentificación de estas propiedades de entorno y usa la operación "bind" de LDAP para pasárselos al servidor. El siguiente ejemplo muestra cómo, usando una password de texto simple, un cliente se autentifica en un servidor LDAP: // Set up the environment for creating the initial context Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial"); // Authenticate as S. User and password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); // Create the initial context DirContext ctx = new InitialDirContext(env); // ... do something useful with ctx Usar Información de Autentificación Diferente para una Contexto Si quermos usar información de autentificación diferente para un contexto existente, podemos usar Context.addToEnvironment() y Context.removeFromEnvironment() para actualizar las propiedades de entorno que contienen la información de autentificación. Las siguientes llamadas a los métodos del contexto uarán la nueva información de autentificación para comunicarse con el servidor. El siguiente ejemplo muestra cómo se modifica la información de autentifiación de un contexto a "none" después de haber crado el contexto: // Authenticate as S. User and the password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); // Create the initial context DirContext ctx = new InitialDirContext(env); // ... do something useful with ctx // Change to using no authentication ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "none"); // ... do something useful with ctx Fallos de Autentificación La autentificación puede fallar por varias razones. Por ejemplo, si suministramos información de autentificación incorrecta, como una password incorrecta, etc, entonces se lanza una AuthenticationException. Aquí hay un ejemplo que es una variación del ejemplo anterior. Esta vez, una password incorrecta hace que falle la autentificación: // Authenticate as S. User and give an incorrect password env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "notmysecret"); Esto produce la siguiente salida: javax.naming.AuthenticationException: [LDAP: Invalid Credentials] at java.lang.Throwable.<init>(Compiled Code) at java.lang.Exception.<init>(Compiled Code) ... Como diferentes servidores soportan diferentes mecanismos de autentificación, podríamos solicitar un mecanismo de autentificación que el servidor no soporta. En este caso, se lanzará una AuthenticationNotSupportedException. Aquí hay un ejemplo que es una variación del ejemplo anterior. Esta vez, un mecanismo de autentificación no soportado ("custom") hace que falle la autentificación: // Authenticate as S. User and the password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "custom"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); Esto produce la siguiente salida: javax.naming.AuthenticationNotSupportedException: Unsupported value for java.naming.security.authentication property. at java.lang.Throwable.<init>(Compiled Code) at java.lang.Exception.<init>(Compiled Code) at javax.naming.NamingException.<init>(Compiled Code) ...
|