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.