Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


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:

  • Context.SECURITY_AUTHENTICATION ("java.naming.security.authentication").

    Especifica el mecanismo de autentificación a usar. Para el proveedor de servicios LDAP de Sun, esto puede ser una de las siguientes strings: "none", "simple", sasl_mech, donde sasl_mech es una lista separada por espacio de nombres de mecanismos SASL. Puedes ver una descripciónde estos strings en la página siguiente.

  • Context.SECURITY_PRINCIPAL ("java.naming.security.principal").

    Especifica el nombre del usuario/programa que está haciendo la autentificación y depende del valor de la propiedad Context.SECURITY_AUTHENTICATION.

  • Context.SECURITY_CREDENTIALS ("java.naming.security.credentials").

    Especifica las credenciales del usuario/programa que está haciendo la autentificación y depende del valor de la propiedad Context.SECURITY_AUTHENTICATION.

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)
	...

Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis