Fragen Sie ein echtes lokales LDAP-Verzeichnis ab
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.
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 })) });
});
}