Consultar un directorio LDAP local real
LDAP(options, callback) es el cliente de lectura nativo. options.ldap suministra host y port; user es el DN de enlace, password su contraseña, dn la base de búsqueda y type la clase de objeto solicitada (person o group). type:'profile' usa login para buscar sAMAccountName y devuelve un objeto o null. noauth:true omite el enlace; no otorga permisos de directorio. Especifique siempre una base de búsqueda explícitamente.
attributes asigna nombres de atributos devueltos a tipos de conversión (string, number, date, buffer, hex, base64, etc.); no es una lista permitida de atributos para recuperar. Un directorio puede devolver valores escalares o matrices cuando se repite un atributo. Restrinja los datos que expone su API HTTP.
Este dispositivo ejecutable requiere herramientas OpenLDAP locales: slapd, ldapadd y los archivos de esquema core/cosine/inetorgperson. En macOS, los valores predeterminados a continuación utilizan las herramientas del sistema; otras instalaciones pueden configurar FORGE_SLAPD, FORGE_LDAPADD y FORGE_LDAP_SCHEMA. Ejecuta un servidor loopback independiente y sin privilegios y una base de datos LDIF temporal y luego lo finaliza. Nunca utiliza un directorio existente. La prueba cubre la búsqueda, múltiples valores de atributos y un límite de enlace no válido; no certifica la compatibilidad con Active Directory, TLS/StartTLS, grupos o comportamiento de reconexión. Nunca envíe credenciales reales a través de una red desprotegida.
Decida la autenticación desde el enlace. Verifique el resultado del enlace en su propio código y trate un perfil devuelto como autenticado solo después de que el enlace haya sido exitoso.
exports.install = function() {
ROUTE('POST /directory-fixture/ @json', directory);
};
function directory($) {
var port = Number($.body.port);
if (!Number.isInteger(port) || port < 1024 || port > 65535)
return $.invalid(400);
LDAP({
ldap: { host: '127.0.0.1', port: port },
user: 'cn=admin,dc=forge,dc=test',
password: $.body.wrong ? 'incorrect' : 'local-fixture-only',
dn: 'dc=forge,dc=test',
type: 'person',
attributes: { cn: 'string', mail: 'string' }
}, function(err, people) {
if (err)
$.json({ failed: true });
else
$.json({ people: people.map(person => ({ cn: person.cn, mail: person.mail })) });
});
}