Sök efter en verklig lokal LDAP-direktiv
LDAP(options, callback) är den inbyggda läsklienten. options.ldap anger host och port; user är bind-DN, password dess lösenord, dn sökbasen och type den begärda objektklassen (person eller group). type:'profile' använder login för att söka sAMAccountName och returnerar ett objekt eller null. noauth:true hoppar över bind; det ger inga behörigheter i katalogen. Ange alltid sökbasen uttryckligen.
attributes mappar namn på returnerade attribut till konverteringstyper (string, number, date, buffer, hex, base64 osv.); det är inte en tillåtelselista över attribut att hämta. En katalog kan returnera skalära värden eller arrayer när ett attribut upprepas. Begränsa de data som ditt HTTP-API exponerar.
Den här körbara fixturen kräver lokala OpenLDAP-verktyg: slapd, ldapadd och schemafilerna core/cosine/inetorgperson. På macOS använder standardvärdena nedan systemverktygen; andra installationer kan sätta FORGE_SLAPD, FORGE_LDAPADD och FORGE_LDAP_SCHEMA. Den kör en separat oprivilegierad loopback-server med en tillfällig LDIF-databas och avslutar den sedan. Den använder aldrig en befintlig katalog. Testet täcker sökning, flera attributvärden och en gräns vid ogiltig bind; det intygar inte kompatibilitet med Active Directory, TLS/StartTLS, grupper eller återanslutningsbeteende. Skicka aldrig riktiga inloggningsuppgifter över ett oskyddat nätverk.
Besluta autentisering från bindningen. Kontrollera resultatet av bindningen i din egen kod och behandla en returnerad profil som autentiserad först efter att bindningen har lyckats.
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 })) });
});
}