# Fragen Sie ein echtes lokales LDAP-Verzeichnis ab

> Fragen Sie eine isolierte OpenLDAP-Instanz ab und überprüfen Sie das Bindungsergebnis insgesamt5 0.0.19.

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

`LDAP(options, callback)` ist der native Lese-Client. `options.ldap` liefert `host` und `port`; `user` ist der Bind-DN, `password` sein Passwort, `dn` die Suchbasis und `type` die angeforderte Objektklasse (`person` oder `group`). `type:'profile'` nutzt `login`, um `sAMAccountName` zu suchen, und gibt ein Objekt oder `null` zurück. `noauth:true` überspringt den Bind; es gewährt keine Verzeichnisrechte. Gib die Suchbasis immer explizit an.

`attributes` ordnet Namen zurückgegebener Attribute Konvertierungstypen zu (`string`, `number`, `date`, `buffer`, `hex`, `base64` usw.); es ist **keine** Positivliste der abzurufenden Attribute. Ein Verzeichnis kann skalare Werte oder Arrays zurückgeben, wenn ein Attribut mehrfach vorkommt. Beschränke die Daten, die deine HTTP-API offenlegt.

Dieses ausführbare Fixture benötigt lokale **OpenLDAP**-Werkzeuge: `slapd`, `ldapadd` und die Schemadateien core/cosine/inetorgperson. Unter macOS verwenden die Standardwerte unten die Systemwerkzeuge; andere Installationen können `FORGE_SLAPD`, `FORGE_LDAPADD` und `FORGE_LDAP_SCHEMA` setzen. Es startet einen separaten unprivilegierten Loopback-Server mit einer temporären LDIF-Datenbank und beendet ihn danach. Ein vorhandenes Verzeichnis wird nie benutzt. Der Test deckt Suche, mehrere Attributwerte und eine Grenze bei ungültigem Bind ab; er bescheinigt keine Kompatibilität mit Active Directory, TLS/StartTLS, Gruppen oder Wiederverbindungsverhalten. Sende niemals echte Zugangsdaten über ein ungeschütztes Netzwerk.

**Authentifizierung aus der Bindung entscheiden.** Überprüfen Sie das Ergebnis der Binde in Ihrem eigenen Code und behandeln Sie ein zurückgegebenes Profil als authentisch erst nachdem die Binde erfolgreich ist.

```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 })) });
	});
}
```
