Usted está aquí:Inicio/MG Developers/Blog/Almacenamiento de objetos Java en Active Directory utilizando LDAP y JNDI

Publicaciones recientes

Por Qué Elegirnos

  • Más de 400 proyectos puestos en producción durante los últimos 15 años demuestran el compromiso con nuestros clientes, certifican nuestra metodología y reflejan la capacidad de nuestro equipo de profesionales.

  • En MicroGestion existe un compromiso genuino con la calidad, la formación continua de nuestros profesionales y la mejora continua de nuestros procesos son la evidencia de dicho compromiso.

  • Creemos que los siguientes rasgos son esenciales para el ejercicio de nuestra actividad:

    » Entusiasmo, como requisito para llevar a cabo un proceso creativo.
    » Proactividad, como engranaje de la dinámica de grupos.
    » Responsabilidad, como condición fundamental para asumir compromisos en cada nivel de la empresa.
    » Trabajo en grupo, como mecánica de trabajo elegida para lograr sinergia.

    Asimismo nuestra capacidad de ejecución se fundamenta en el respeto de los siguiente valores:

    » Flexibilidad, necesaria para buscar el mejor camino en cada proyecto.
    » Compromiso, para formar equipos con conocimiento de dominio y orientación al logro.
    » Solvencia, que nos permite diseñar la mejora alternativa tecnológicas para cada solución.

  • En MicroGestion las personas son el factor más importante para el éxito de los proyectos; la conformación y gestión del capital humano se lleva a cabo teniendo en cuenta los siguientes lineamientos:

    » Determinando el conjunto correcto de personas para cada proyecto.
    » Desarrollando un ambiente donde existan oportunidades de aprendizaje.
    » Propiciando la confianza y el respeto dentro del equipo.
    » Permitiendo el desacuerdo y previendo una manera de resolverlo.
    » Preguntando, no inquiriendo.
    » Reconociendo los logros.

13 Oct

Almacenamiento de objetos Java en Active Directory utilizando LDAP y JNDI

En esta entrada se describen los pasos que deben llevarse a cabo para almacenar objetos Java en Microsoft Active Directory utilizando el protocolo LDAP.

Motivación

Incluso hoy -en tiempos de la "Nube"- las organizaciones con operaciones descentralizadas suelen requerir el desarrollo y el mantenimiento de sistemas distribuidos.

En estos casos, el mantenimiento de información consistente en todos las ubicaciones suele ser un issue a resolver, sin embargo, las organizaciones cuentan con una herramienta fiable y consistente para llevar a cabo esta tarea: Microsoft Active Directory (AD).

Aunque podemos afirmar que la mayoría de las empresas que requieren soluciones distribuidas tienen implementaciones de AD en su infraestructura, rara vez extienden su utilización a la esfera de las aplicaciones de negocio mas allá del proceso de autenticación y/o autorización de los usuarios.

Es importante que la utilización de Active Directory para almacenar objetos se lleve a cabo con criterio, es un directorio, no una base de datos relacional; por ejemplo, se puede almacenar información de ubicación de servicios, información de negocio que no cambia constantemente, etc.

Configuración de AD para almacenar objetos Java

El servicio de AD requiere de una configuración adicional para soportar el RFC 2713 que establece como se deben almacenar objetos Java en un directorio LDAP. El RFC 2713 es un esquema que define los elementos necesarios para representar objetos Java serializados y remotos en un directorio LDAP.

Oracle proporciona la clase CreateJavaSchema para configurar el esquema necesario para almacenar objetos Java en un directorio LDAP.

Una vez que compilamos la clase será necesario ejecutar el siguiente comando indicando el host correspondiente al AD y las credenciales de acceso:

java    -Djava.naming.provider.url=ldap://AD_HOST_OR_IP CreateJavaSchema 
        -sad 
        -nUSERNAME 
        -pPASSWORD

Por ejemplo:

java    -Djava.naming.provider.url=ldap://ad.intra.microgestion.com CreateJavaSchema 
        -sad 
        -nCN=Administrator,CN=Users,DC=intra,DC=microgestion,DC=com 
        -pMiAdminPassword

El resultado de la ejecución debería ser similar al siguiente:

[updating Active Directory schema ...]
  [locating the schema]
  [inserting new attribute definitions ...]
    [javaClassName]
    [javaCodeBase]
    [javaSerializedData]
    [javaFactory]
    [javaReferenceAddress]
    [javaDoc]
    [javaClassNames]
  [inserting new object class definitions ...]
    [javaContainer]
    [javaObject]
    [javaSerializedObject]
    [javaNamingReference]
    [javaMarshalledObject]
[update completed]
Use your directory server's administration tool to verify
that the schema is correct:

Acerca de JNDI y el almacenamiento de objetos en AD

Java Naming Directory Interface, o JNDI, es una API de Java que proporcionar una visión orientada a objetos de un directorio o servicio de nombres; los servicios accesibles mediante el protocolo LDAP -en nuestro caso Active Directory- entran dentro de esta categoría y por ello son accesibles mediante JNDI.

El acceso a un directorio utilizando JNDI se realiza mediante contextos. Los contextos son conjuntos de enlaces a objetos que se pueden crear y luego encontrar a través de operaciones de búsqueda o resolución de nombres.

El siguiente fragmento de código crea un contexto para acceder a un AD utilizando el protocolo LDAP:

String baseDN = ",DC=intra,DC=microgestion,DC=com";
java.util.Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.setProperty(Context.PROVIDER_URL, "ldap://ad.intra.microgestion.com/OU=JAVA" + baseDN);
properties.setProperty(Context.SECURITY_AUTHENTICATION, "simple");
properties.setProperty(Context.SECURITY_PRINCIPAL, "CN=Administrator,CN=Users" + baseDN );
properties.setProperty(Context.SECURITY_CREDENTIALS, "MiAdminPassword");
javax.naming.Context context = new javax.naming.InitialContext(properties);

Nota: es conveniente almacenar los objetos Java en un contenedor del directorio dedicado para este fin, en nuestro caso, como se puede ver al establecer el valor de la propiedad Context.PROVIDER_URL, utilizaremos una unidad organizacional denominada JAVA, cuyo nombre distinguido es OU=JAVA,DC=intra,DC=microgestion,DC=com.

Almacenamiento, lectura y eliminación de objectos serializables

Cuando almacenamos un objeto dentro de un directorio, conceptualmente, estamos creando un enlace; la clase javax.naming.Context dispone de un método denominado bind que permite llevar a cabo esta tarea tal como se muestra en el siguiente fragmento de código en donde se almacena un objeto del tipo String con el nombre MiObjeto:

java.util.Properties properties = new Properties();
...
javax.naming.Context context = new javax.naming.InitialContext(properties);
String objectName = "MiObjeto";
String object = "Objeto del tipo java.lang.String";
context.bind("cn=" + objectName, object);

Con la ayuda de una herramienta de visualización de directorios LDAP es posible observar la representación del objeto almacenado en el directorio:

Atributos del objeto almacenado en AD

La lectura de un objeto almacenado se realiza por medio del método lookup de la clase javax.naming.Context, el siguiente ejemplo muestra como eliminar el objeto creado anteriormente:

java.util.Properties properties = new Properties();
...
javax.naming.Context context = new javax.naming.InitialContext(properties);
String objectName = "MiObjeto";
String object = (String) context.lookup("cn=" + objectName);
System.out.println(object);

Para eliminar un objeto almacenado tendremos que utilizar el método unbind de la clase javax.naming.Context, el siguiente ejemplo muestra como eliminar el objeto creado anteriormente:

java.util.Properties properties = new Properties();
...
javax.naming.Context context = new javax.naming.InitialContext(properties);
String objectName = "MiObjeto";
context.unbind("cn=" + objectName);

Referencias

Modificado por última vez en Lunes, 18 Noviembre 2013 14:11
Valora este artículo
(0 votos)
Diego Mendoza

Diego Mendoza se desempeña como arquitecto de software en MicroGestion participando en el proceso de análisis y diseño de soluciones que tengan requerimientos de alta disponibilidad, integración de ambientes heterogéneos, orientación a servicios, gestión de procesos de negocio, etc.

Sitio Web: www.microgestion.com/index.php/mg-developers/blog/author/988-diegomendoza
Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el Código HTML. Tu dirección de correo NO será publicada.

Comuníquese con nosotros telefónicamente +54 011 4382-0878 o vía correo electrónico Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.