# Consultar un directorio LDAP local real

> Consulta una instancia OpenLDAP aislada y verifica el resultado del enlace en total5 0.0.19.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: es
Content-SHA256: 648545d2f76e9cd30d38889320f1c0063a9c0288cdba263dfdbd35788e0fa48b
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`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.

```js controllers/directory.js
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 })) });
	});
}
```
