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

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Seguridad

El JNDI no define un modelo de seguridad. En vez de eso, usa los modelos de seguridad situados en la plataforma Java y en el proveedor de servicios subyacentes. Sin embargo, en términos de soporte de seguridad, el JNDI proporciona propiedades de entorno relacionadas con la seguridad que permiten al cliente JNDI especificar necesidades de información comunmente relacionadas con la seguridad. Estas propiedades se listan en la lección Propiedades de Entorno. Abajo tenemos un breve sumario de ellas.

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

    Especifica el mecanismo de autentificación a utilizar.

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

    Especifica el nombre del usuario/programa que está haciendo la autentificación.

    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. Depende del valor de la propiedad Context.SECURITY_AUTHENTICATION.

  • Context.SECURITY_PROTOCOL ("java.naming.security.protocol").

    Especifica el protocolo de seguridad a utilizar.

Los proveedores de servicios están obligados a usar estar propiedades cuando se aplican para acceder a servicios de nombres/directorios subyacentes. Sin embargo, los poveedores podrían usar otros significados para autentificar sus clientes, como el Java Authentication and Authorization Service.

Propiedades de Entorno

Necesitamos tener en mente que las propiedades de entorno posiblemente contienen infomación sensible a la seguridad (como passwords). También necesitamos entender que cuando suministramos propiedades de entorno a un proveedor de servicio (usando el constructor de InitialContext), estos son pasados por el proveedor a las factorías (ver las lecciones Factorías de Objetos, Factorías de Estados, Factoriás de respuestas de control para más detalles). Debemos asegurarnos de que todas las factorías y proveedores que usemos pueden ser auténticos para pasarles posible información sensible de seguridad.

Los ficheros de recursos de aplicación, como se describió en Propiedades de Entorno, nos permiten especificar fácilmente propiedades de entorno. El JNDI leerá y usará todos los ficheros de recursos de aplicación que haya en el classpath. Como las propiedades de entorno pueden afectar a las factorías que utilizamos (ver la siguiente sección), deberíamos ser cuidadosos sobre las definiciones de clases y ficheros de recursos de aplicación que incluimos en nuestro classpath.

Factorías

La arquitectura JNDI está diseñada para ser flexible. Podemos elegir dinámicamene proveedores de servicios, así como personalizarlos usando factorías de objetos, factorías de estado y factórias de respuestas de control. Así, dependiendo de la configuración de los proveedores y las factorías el comportamiento del programa puede variar drásticamente.

Esta flexibilidad, aunque poderosa, tiene implicaciones de seguridad. Deberíamos asegurarnos de que las factorías usadas son conocidas. Las factorías maliciosas pueden devolver datos erréneos o intencionadamente mal manejados o corromper nuestro servicio de nombres/directorio. Como los servicios de nombres/directorios normalmente se usan para almacenar información relacionada con la seguridad, deberíamos tomar precauciones extras para incluir sólo factorías válidaa y conocidas.

Ejemplares de Contexto

Un ejemplar de Context o uno de sus subinterfaces es una conexión posiblemente autentificada al servicio de nombres/directorio subyacente. Pueden ser devueltas por varios métodos del API JNDI y SPI, incluyendo los siguientes.

Context.lookup() Context.lookupLink()
Context.listBindings() Context.createSubcontext()
DirContext.createSubcontext() varias formas de DirContext.search()
DirContext.getSchema() DirContext.getSchemaClassDefinition()
Attribute.getAttributeDefinition() Attribute.getAttributeSyntaxDefinition()
LdapContext.newInstance NamingManager.getContinuationContext()
DirectoryManager.getContinuationDirContext() NamingManager.getObjectInstance()
DirectoryManager.getObjectInstance() NamingManager.getURLContext()
NamingManager.getInitialContext() NamingEvent.getEventContext y getSource() (heredado de java.util.EventObject).
NamingExceptionEvent.getEventContext y getSource() (heredado de java.util.EventObject). UnsolicitedNotificationEvent.getSource() (heredado de java.util.EventObject).

Los ejemplares de Context también son pasados a las factorías de objetos, de estados y de controles.

Como con las propieades de entorno, no deberíamos pasar ejemplares de Context a proveedores de servicios o factorías no conocidos, o a cualquier otro código no firmado.


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