Cómo mover el contexto ldap
1. Introducción a LDAP
LDAP (Protocolo ligero de acceso a directorios) es un servicio de información que proporciona servicios de información llamados servicios de directorio. Un servicio de directorio es un sistema de base de datos especial que está específicamente optimizado para operaciones de lectura, exploración y búsqueda. Los catálogos se utilizan normalmente para contener información descriptiva basada en atributos y admitir capacidades de filtrado sofisticadas. Los catálogos generalmente no admiten la compleja gestión de transacciones o las estrategias de reversión que las bases de datos de propósito general requieren para grandes operaciones de actualización. Las actualizaciones del servicio de directorio son generalmente muy sencillas. Este tipo de directorio puede almacenar diversa información, incluida información personal, enlaces web, imágenes jpeg, etc. Para acceder a la información almacenada en el directorio, es necesario utilizar LDAP, un protocolo de acceso que se ejecuta en TCP/IP.
La información del directorio LDAP está organizada en una estructura de árbol y la información específica se almacena en la estructura de datos de la entrada. Una entrada es equivalente a un registro en una tabla en una base de datos relacional; una entrada es un atributo (Atributo) con un nombre distintivo (DN) que se utiliza para hacer referencia a la entrada que es equivalente a la palabra clave (Clave principal). la tabla de base de datos relacional. Un atributo consta de un tipo (Type) y uno o más valores (Values), lo que equivale a un campo (Field) en una base de datos relacional que consta de un nombre de campo y un tipo de datos. Solo para facilitar la recuperación, el Type. en LDAP puede tener múltiples valores, en lugar de en bases de datos relacionales, para reducir la redundancia de datos, los campos implementados deben estar no relacionados. Las entradas en LDAP generalmente están organizadas según la ubicación geográfica y las relaciones organizativas, lo cual es muy intuitivo. LDAP almacena datos en archivos Para mejorar la eficiencia, se puede utilizar una base de datos de archivos basada en índices en lugar de una base de datos relacional. Un ejemplo de tipo es correo, donde el valor sería una dirección de correo electrónico.
La información LDAP se almacena en una estructura de árbol. El país (c=CN) o el nombre de dominio (dc=com) generalmente se define en la raíz del árbol, y una o más organizaciones a menudo se definen a continuación. it ) (o=Acme) o unidades organizativas (ou=Personas). Una unidad organizativa puede contener información como todos los empleados, todas las impresoras del edificio, etc. Además, LDAP admite el control sobre qué atributos puede y debe admitir una entrada. Esto se logra mediante un atributo especial llamado objectClass. El valor de este atributo determina algunas reglas que la entrada debe seguir, que especifican qué atributos puede y al menos debe contener la entrada. Por ejemplo: la clase de objeto inetorgPerson debe admitir los atributos sn (apellido) y cn (nombre común), pero también puede incluir atributos opcionales como correo electrónico, número de teléfono, etc.
2. Correspondencia de abreviaturas LDAP
o– organización (organización-empresa)
ou – unidad de organización (unidad de organización-departamento)
c - countryName (país)
dc - domainComponent (nombre de dominio)
sn - suer name (nombre real)
cn - nombre común (nombre común )
3. Diseño de directorios
Diseñar la estructura del directorio es uno de los aspectos más importantes de LDAP. A continuación usaremos un ejemplo simple para ilustrar cómo diseñar una estructura de directorio razonable. Este ejemplo accederá al texto a través de la libreta de direcciones de Netscape. Supongamos que hay una empresa llamada Acme (o=Acme) ubicada en los Estados Unidos (c=US) y que abarca varios estados. Acme quiere implementar un pequeño servidor de libreta de direcciones para todos los empleados.
Comenzamos con un DN de organización simple:
dn: o=Acme, c=US
Todas las clasificaciones de organización y atributos de Acme se almacenarán en este DN, este DN es único en el directorio almacenado en el servidor.
Acme espera dividir la información de sus empleados en dos categorías: gerentes (ou= Gerentes) y empleados ordinarios (ou= Empleados). Los nombres distinguidos relativos (RDN, nombres distinguidos relativos) generados por esta clasificación son shi:
dn: ou=Managers, o=Acme, c=US
dn: ou=Employees, o=Acme, c=US
at A continuación veremos la composición del Estructura jerárquica: el vértice es Acme de EE. UU., y debajo se encuentran la unidad organizativa del gerente y la unidad organizativa del empleado. Por lo tanto, la composición del DN que incluye Gerentes y Empleados es:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US
dn: cn=Ray D . Jones, ou=Empleados, o=Acme, c=US
dn: cn=Eric S. Woods, ou=Empleados, o=Acme, c=US
Para haga referencia a la entrada de nombre común de Jason H. Smith, LDAP utilizará cn=RDN de Jason H. Smith. Luego combine las entradas principales anteriores para formar la siguiente estructura de árbol:
cn=Jason H. Smith
+ ou=Managers
+ o =Acme p>
+ c=US
-> dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
Ahora la estructura del directorio tiene definido y el siguiente paso es importar los datos de información del directorio. Los datos de información del directorio se almacenarán en el archivo LDIF, que es el archivo de almacenamiento predeterminado para los datos de información del directorio importados. Los usuarios pueden escribir fácilmente scripts Perl para crear automáticamente archivos LDIF a partir de archivos del sistema como /etc/passwd, NIS, etc.
El siguiente ejemplo guarda los datos de información del directorio como un archivo testdate.ldif. La descripción del formato de este archivo se puede obtener en man ldif.
Antes de agregar unidades organizativas, primero debe definir el DN de Acme:
dn: o=Acme, c=US
objectClass: organización
El atributo o aquí es obligatorio
o: Acme
El siguiente es el DN de la unidad del grupo de administración. Esta entrada debe definirse antes de agregar cualquier información del administrador.
dn: ou=Managers, o=Acme, c=US
objectClass: OrganizationalUnit
El atributo ou aquí es obligatorio.
ou: Gerentes
Primer gerente DN:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c= US p>
objectClass: inetOrgPerson
Tanto cn como sn son atributos obligatorios:
cn: Jason H. Smith
sn: Smith
Pero también puedes definir algunos atributos opcionales:
número de teléfono: 111-222-9999
correo: headhauncho@acme.com
nombre de localidad: Houston
Puedes definir otra unidad organizativa:
dn: ou=Employees, o=Acme, c=US
objectClass: OrganizationalUnit
ou: Empleados
Y agregue información de los empleados de la siguiente manera:
dn: cn=Ray D. Jones, ou=Empleados, o=Acme, c=US
objectClass: inetOrgPerson
cn: Ray D. Jones
sn: Jones
número de teléfono: 444-555-6767
correo : jonesrd@acme.com
Nombre de la localidad: Houston
dn: cn=Eric S. Woods, ou=Empleados, o=Acme, c=EE.UU.
clase de objeto: inetOrgPerson
cn: Eric S. Woods
sn: Woods
número de teléfono: 444-555-6768
correo: woodses @acme.com
Nombre de la localidad: Houston
4. Configuración de OpenLDAP
Este artículo practica la instalación y configuración de openldap en Windows y cómo agregar una entrada, navegación por LdapBrowser y Todo el proceso de conexión del programa Java a openldap.
1. Descargue e instale openldap para Windows, la dirección de descarga de la versión actual 2.2.29: =Manager,dc=my-domain,dc=com"
Cambie estas dos líneas a
sufijo "o=teemlink,c=cn"
rootdn "cn=Manager,o=teemlink,dc=cn"
Depende de cómo define el sufijo, el archivo ldif en los siguientes pasos debe definirse con él. También tenga en cuenta que hay un secreto rootpw en este archivo de configuración. Este secreto es la contraseña de cn=Manager, que se usará más adelante, pero aquí está claro. contraseña de texto, puede usarla Comando: slappasswd -h {MD5} -s secret Calcule la contraseña cifrada {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== para reemplazar el secreto en la configuración.
3. Inicie openldap
CMD para ingresar c:\openldap, ejecute el comando sldapd -d 1
Puede ver una información impresa en el console, openldap utiliza la base de datos Berkeley DB para almacenar datos del directorio de forma predeterminada.
4. Cree entradas, edite e importe archivos ldif
1) Cree un nuevo archivo ldif (formato de intercambio de datos LDAP) (formato de texto sin formato), como test.ldif, el El contenido del archivo es el siguiente:
dn: o=teemlink
objectclass: top
objectclass: organización
o: development p>
2 ) Ejecute el comando: ldapadd -l test.ldif
5 Utilice el navegador LDAP para acceder
5.1 Instale el software LDAP Browser2.6 y realice lo siguiente. operaciones:
5.2 Efecto de visualización
5. Operación Java LDAP
5.1 Utilice JNDI para acceder
paquete cn.myapps.test;
p>importar java.util.Hashtable;
importar javax.naming.Context;
importar javax.naming.NamingException ;
importar javax.naming.directory.Attributes;
importar javax.naming.directory.DirContext;
importar javax.naming.directory.InitialDirContext;
clase pública LdapTest {
public void JNDILookup() {
String root = "o=teemlink,c=cn";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL , "ldap://192.168.0.30/" + raíz);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=Nicholas,ou=producto,o= teemlink,c=cn");
env.put(Context.SECURITY_CREDENTIALS, "123456");
DirContext ctx = null ;
intente {
ctx = new InitialDirContext(env);
Atributos attrs = ctx.getAttributes("cn=Nicholas,ou=product");
System.out. println("Apellido: " + attrs.get("sn").get());
Sys
tem.out.println("Autenticación exitosa");
} catch (javax.naming.AuthenticationException e) {
e.printStackTrace();
System.out.println("Error de autenticación");
} catch (Excepción e) {
System.out.println("Error de autenticación:");
e.printStackTrace();
}
if (ctx != null) {
prueba {
ctx. close();
} catch (NamingException e) {
// ignorar
}
}
}
public static void main(String[] args) {
LdapTest LDAPTest = new LdapTest();
LDAPTest.JNDILookup(); p>
}
}
5.2 Utilice JLDAP para acceder
Dirección de acceso: =Manager,o=teemlink,c=cn"; p>
Cadena contraseña = "secreto";
Cadena searchBase = "ou=develop,o=teemlink,c=cn";
Cadena searchFilter = "objectClass=* ";
LDAPConnection lc = new LDAPConnection();
intenta {
// conectarte al servidor
lc.connect( ldapHost, ldapPort);
// enlace al servidor
lc.bind(ldapVersion, loginDN, contraseña.getBytes("UTF8"));
LDAPSearchResults searchResults =
lc.search(searchBase, // contenedor para buscar
searchScope, // alcance de búsqueda
searchFilter, // filtro de búsqueda
atributos, // "1.1" devuelve sólo el nombre de la entrada
atributoOnly); // no se devuelven atributos
// imprime todos los objetos
while (searchResults.hasMore()) {
LDAPentry nextEntry = null ;
intente {
nextEntry = searchResults.next();
System.out.println("\n" + nextEntry.getDN());
System.out.println(nextEntry.getAttributeSet());
} catch (LDAPException e) {
System.out.println("Error: " + e.toString());
// Se lanza una excepción, vaya a la siguiente entrada
continuar;
}
}
// desconectarse con el servidor
lc.disconnect();
} catch (LDAPException e) {
System. out.println("Error: " + e.toString());
} catch (UnsupportedEncodingException e) {
System.out.println("Error: " + e. toString());
}
System.exit(0);
}
}
5.3 Utilice JDBC-LDAP para acceder
Dirección de acceso:?SEARCH_SCOPE:=subTreeScope";
Conexión con = DriverManager.getConnection(ldapConnectString, "cn=Manager,o=teemlink,c =cn", "secret");
String sql = "SELECT * FROM ou=develop,o=teemlink,c=cn";
Declaración sat = con.createStatement( );
ResultSet rs = sta.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString(1));
}
if (con != null)
con.close();
}
}