2. Cómo implementa nodejs la sincronización de la estructura organizativa ldap, la sincronización de usuarios y la autenticación de usuarios

Necesidades del negocio

Recientemente recibí una tarea para sincronizar la información del usuario, la estructura organizativa y la autenticación de dominio en ldap. Por supuesto, esta tecnología es compatible con nodejs. Encontré un
buen enlace de módulo tripartito en Internet: node-ldap

Suplemento de uso del módulo

Departamento de búsqueda

Organización A: Catering Co., Ltd. canying.com
Organización B: Auto Repair Co., Ltd. www.qixiu.com

Entonces, ¿cómo rellenar la base?
Tomemos como ejemplo la organización A:
canying.com/Catering Co., Ltd./IT Department
ou=IT Department,ou=Catering Co.,dc=canying,dc=com
ou representa el directorio y busca todos los subdirectorios bajo el directorio del departamento de TI (departamentos subordinados), suponiendo que el departamento de TI no tiene subordinados, la longitud de la matriz devuelta es 0

Cómo completar la organización B:
www.qixiu.com/Auto Repair Co., Ltd./Repair Department
ou=Repair Department,ou=Auto Repair Co., Ltd.,dc=www,dc=qixiu,dc=com

Por lo tanto, queremos encontrar todas las estructuras organizativas, lo cual es similar a buscar todos los subdirectorios en un determinado directorio de archivos raíz.
Por lo general, el método que utilizamos es la búsqueda recursiva, que se agregará más adelante.

Departamento de búsqueda----Busca todas las subcarpetas (departamentos subordinados) del directorio principal (departamento superior)

client.searchOU('dc=ad,dc=yliyun,dc=com').then(function(ous) {
    
    
    console.log(ous);
}).catch(function(err) {
    
    
    console.error(err);    
});

Descubrimos que solo hay dos campos en la colección de departamentos en el valor de retorno del departamento, ldapDn y deptName,
que se pueden modificar.¿Cómo hacer esto?
En primer lugar, primero encontramos node_modules/node-ldap/lib/ldap.js.
Descargué el complemento con vscode, así que presioné Ctrl + botón izquierdo del mouse y hice clic para saltar a client.searchOU.
En client.searchOU, podemos ver el retorno real. El valor proviene de _parseOU
de la misma manera que lo encontramos,

obviamente nosotros

function _parseOU(entry) {
    
    
    var ou = {
    
    
        ldapDn: entry.dn,
        deptName: entry.displayName
    };
    if (!ou.deptName) {
    
    
        ou.deptName = entry.name;
    }
    if (!ou.deptName) {
    
    
        ou.deptName = entry.ou;
    }
    return ou;
}

cambie a

function _parseOU(entry) {
    
    
    var ou = {
    
    
        ldapDn: entry.dn,
        deptName: entry.displayName,
        ...entry
    };
    if (!ou.deptName) {
    
    
        ou.deptName = entry.name;
    }
    if (!ou.deptName) {
    
    
        ou.deptName = entry.ou;
    }
    return ou;
}

Podrás ver toda la información sobre el departamento.

Buscar usuarios

Buscar usuarios: busque todos los empleados en el departamento (directorio) actual,
similar a buscar archivos en el directorio actual, excluyendo las carpetas.

    client.searchUser('ou=IT部,ou=餐饮有限公司,dc=canying,dc=com').then(function(users) {
    
    
        console.log(users);
    }).catch(function(err) {
    
    
        console.error(err);    
    });

Solo hay cuatro campos en la colección de usuarios. Cómo mostrar más información sobre el usuario se modifica como above_parseUser

function _parseUser(entry) {
    
    
    var user = {
    
    
        //dn: entry.dn,
        ldapDn: entry.userPrincipalName,
        userName: entry.sAMAccountName,
        realName: entry.displayName,
        mail: entry.userPrincipalName,
        //...entry
    };
    if (!user.realName) {
    
    
        user.realName = entry.name;
    }
    if (!user.realName) {
    
    
        user.realName = entry.cn;
    }
    return user;
}

Reflexiones sobre la sincronización de estructuras organizativas

La estructura organizacional sincronizada por nuestro ldap puede tener varios cambios,
adiciones, eliminaciones y modificaciones.

Si la estructura organizativa que hemos sincronizado en el lado del cliente se ha vinculado a los recursos y
la estructura organizativa del servidor cambia nuevamente, ¿cuál será el impacto?

①El departamento del servidor ha sido eliminado

Divida la lista de departamentos de consulta LIMIT 0,3 y luego use el bucle for
como ejemplo: el departamento de TI en el lado del servidor se eliminó y los recursos se vincularon al departamento de TI en el lado del cliente. Eliminación lógica, luego Los recursos de este departamento ya no estarán en la nueva estructura organizativa.

Respuesta:
Entonces creo que deberíamos hacer un buen trabajo en la gestión de todos los recursos vinculados al departamento. Si el departamento se elimina lógicamente, los recursos relevantes deben administrarse y controlarse, y la interfaz abierta se transferirá más adelante, similar a transferencia de archivos.

②El departamento del servidor se eliminó y luego se volvió a crear

Aunque los nombres son los mismos en la capa inferior, sus ID de objeto en la capa inferior son diferentes. Desde la capa inferior, incluso si ambos se llaman departamento de TI, cuando son dos departamentos que realizan la sincronización, el departamento de TI original seguirá
siendo lógicamente se eliminará y se creará uno nuevo Departamento de TI, este departamento de TI no es otro departamento de TI, entonces, ¿dónde
están los recursos del antiguo departamento de TI? Es difícil controlar la longitud del nombre y qué hacer si hay errores tipográficos; también es posible omitir o perder el tipo. ¿Comparación difusa? Eso es aún peor, el antiguo departamento se llama Departamento de Fabricación y el nuevo departamento se llama Departamento de I+D de Fabricación y Departamento de Mantenimiento de Fabricación ¿A quién crees que le dan sus recursos? Por tanto, no es bueno transferir recursos durante el proceso de sincronización.

Respuesta: Sigue siendo lo mismo. Lo mismo que en la pregunta 1, administrar y controlar los recursos para facilitar la transferencia.

③Cambie el nombre del departamento del servidor al departamento de nivel superior

Sin cambios, el ObjectID subyacente sigue siendo el mismo, por lo que el recurso no flotará

④¿Se pueden eliminar los recursos del departamento sin propiedad?


Intente no abrirlo. Si tiene que abrirlo, lo mejor es agregar una papelera de reciclaje. Los recursos eliminados no atribuidos se pueden poner en la papelera de reciclaje.

Reflexiones sobre la sincronización de listas de usuarios

①El usuario del servidor ha sido eliminado

La consulta de la lista de usuarios también utiliza la consulta dividida, LÍMITE 0,3;
el usuario del servidor se elimina, el usuario del cliente se elimina lógicamente y el recurso todavía está bajo su nombre.

② El usuario del servidor cambia de nombre

Porque el objectId del usuario no ha cambiado y sigue siendo el mismo usuario.

③El usuario del servidor fue eliminado y creado nuevamente

Aquí, debido a que el ObjectId es diferente, se generarán nuevos usuarios y los recursos de los usuarios antiguos siempre se conservarán.
Teniendo en cuenta la singularidad de cierta información, como números de teléfono, direcciones de correo electrónico, códigos generados y limitaciones lógicas, puede considerar fusión o transferencia de usuarios aquí.

Obtener lista de todos los departamentos

1. Información de recopilación del departamento

Supongo que te gusta

Origin blog.csdn.net/adsd1233123/article/details/128370260
Recomendado
Clasificación