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