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 SASL

Requerimientos de Software:

Cuando se usen los ejemplos SASL, necesitaremos los ficheros ldapbp.jar y jaas.jar además de los requerimientos de software listados en la lección Preparaciones. Estos pueden descargarse como parte del proveedor de servicio LDAP desde la JNDI Web site.

El protocolo LDAP v3 usa SASL para soportar autentificación enchufable. Esto significa que el cliente LDAP y el servidor pueden configurarse para negociar y usar posibles mecanismos no estándar y/o personalizados para la autentificación, dependiendo del nivel de protección deseada por el cliente y el servidor. El protocolo LDAP v2 no soporta SASL.

Actualmente se han definido varios mecanismos SASL:

Mecanismos SASL Soportados por los Servidores LDAP

De los mecanismos de la lista anterior, los servidores LDAP más populares (como aquellos de Netscape y Innosoft) actualmente soportan CRAM-MD5 y External. (La RFC 2829) propone el uso de DIGEST-MD5 como mecanismo obligatorio por defecto para servidores LDAP v3.

Aquí tenemos un sencillo programa para encontrar la lista de mecanismos SASL que soporta un servidor LDAP:

// Create initial context
DirContext ctx = new InitialDirContext();

// Read supportedSASLMechanisms from root DSE
Attributes attrs = ctx.getAttributes(
    "ldap://localhost:389", new String[]{"supportedSASLMechanisms"});

Aquí podemos ver la salida producida por la ejecución de este programa en un servidor que soporta mecanismo SASL externo.

{supportedsaslmechanisms=supportedSASLMechanisms: EXTERNAL}

Especificar el Mecanismo de Autentificación

Para usar un mecanismo SASL particular, especificamos su "Internet Assigned Numbers Authority" (IANA)-nombre de mecanismo registrado en la propiedad de entorno Context.SECURITY_AUTHENTICATION. También podemos especificar una lista de mecanismos para que pruebe el proveedor LDAP. Esto se hace especificando una lista ordenada y separada por espacios con los nombres de los mecanismos. El proveedor LDAP usará el primer mecanismo para el que encuentre una implementación.

Aquí hay un ejemplo que le pide al proveedor LDAP que intente obtener una implementación del mecanismo DIGEST-MD5, y si no está disponible use una para CRAM-MD5.

env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5 CRAM-MD5");

Podríamos obtener esta lista de mecanismos de autentificación del usuario de nuestra aplicación. O podríamos obtenerla preguntándole al servidor LDAP. mediante una llamada similar a la mostrada anteriormente. El propio proveedor LDAP no consulta al servidor sobre esta información. Simplemente intenta localizar y usar la implementación de los mecanismos especificados.

El provedor LDAP de Sun tiene soporte interno para los mecanismos SASL CRAM-MD5 y External; podemos añadir soporte adicional para otros mecanismos. Puedes ver la sección Usar Mecanismos SASL arbitrarios.

Especificar el Nombre Distinguido de "Bind"

La autentifiación SASL consiste en un intercambio de mensajes SASL embebidos entre el cliente y el servidor dentro de solicitudes y respuestas "bind". La solicitud "bind" contiene un campo nombre, que es el DN (nombre Distinguido) del objeto directorio con el que el cliente desea autentificarse. El valor de este campo podría ser null (es decir, no especificado) dependiendo del mecanismo SASL (que podría embeber el DN dentro de las credenciales que intercambia con el servidor).

El valor de la propiedad de entorno Context.SECURITY_PRINCIPAL se usa como el DN del "bind".

Especificar Entrada para el Mecanismo de Autentificación

Algunos mecanismos, como External, no requieren ninguna entrada adicional, sólo el nombre del mecanismo es suficiente para proceder a la autentificación. La página Ejemplo External muestra cómo usar el mecanismo SASL External.

La mayoría de los otros mecanismos necesitan alguna entrada adicional. Dependiendo del mecanismo, el tipo de entrada podría variar. Abajo podemos ver algunas entradas requeridas por los mecanismos:

  • Authentication id. La identidad de la entidad que realiza la autentificación.
  • Authorization id. La identidad de la entidad para la que deberían chequearse los accesos si la autentificación tiene éxito.
  • Authentication credentials. Por ejemplo, un password o una clave.

Las identidades de autentificación y de autorización podrían ser diferentes si el programa (como un servidor proxy) se está autentificando desde detrás de otra entidad. La identidad de autentifiación se especifica usando la propiedad de entorno Context.SECURITY_PRINCIPAL. Su tipo es java.lang.String.

La password/clave de la identidad de autentificación se especifica usando la propiedad de entorno Context.SECURITY_CREDENTIALS . Su tipo es java.lang.String, array de char (char[]), o array de byte (byte[]). Si la password es un array de byte, se transforma en un array de char usando codificación UTF-8.

Por defecto, también se usa el valor de la propiedad de entorno Context.SECURITY_PRINCIPAL, además de la identidad de autentificación como identidad de autorización. Si necesitamos especificar una identidad de autorización que sea diferente de la identidad de autentificación, entonces se usa la propiedad de entorno "java.naming.security.sasl.authorizationId". Su valor debe ser del tipo java.lang.String.

El ejemplo CRAM-MD5 muestra cómo usar las propiedades Context.SECURITY_PRINCIPAL y Context.SECURITY_CREDENTIALS para autentificación CRAM-MD5.

Si un mecanismo requiere una entrada distinta a las ya descritas, entonces necesitamos definir un objeto callback para el mecanismo a usar. Puedes ver un ejemplo de cómo hacer esto en la página Retrollamadas.


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