ForgeTotal.js 5
fr

Total.js 5

Interroger un véritable annuaire LDAP local

Total.js 5 · total5@0.0.19 total5reference Exécutée avec Total.js 5

LDAP(options, callback) est le client de lecture natif. options.ldap fournit host et port ; user est le DN de liaison, password son mot de passe, dn la base de recherche et type la classe d'objet demandée (person ou group). type:'profile' utilise login pour rechercher sAMAccountName et renvoie un objet ou null. noauth:true ignore la liaison ; il n'accorde pas d'autorisations de répertoire. Spécifiez toujours explicitement une base de recherche.

Les mappages attributes ont renvoyé les noms d'attribut aux types de conversion (string, number, date, buffer, hex, base64, etc.) ; il ne s'agit pas d'une liste autorisée d'attributs à récupérer. Un répertoire peut renvoyer des valeurs scalaires ou des tableaux lorsqu'un attribut se répète. Limitez les données exposées par votre API HTTP.

Cet appareil exécutable nécessite les outils OpenLDAP locaux : slapd, ldapadd et les fichiers de schéma core/cosine/inetorgperson. Sur macOS, les valeurs par défaut ci-dessous utilisent les outils système ; d'autres installations peuvent définir FORGE_SLAPD, FORGE_LDAPADD et FORGE_LDAP_SCHEMA. Il exécute un serveur de bouclage non privilégié distinct et une base de données LDIF temporaire, puis y met fin. Il n'utilise jamais un répertoire existant. Le test couvre la recherche, plusieurs valeurs d'attribut et une limite de liaison non valide ; il ne certifie pas la compatibilité Active Directory, TLS/StartTLS, les groupes ou le comportement de reconnexion. N'envoyez jamais de véritables informations d'identification sur un réseau non protégé.

Décidez de l'authentification à partir de la liaison. Vérifiez le résultat de la liaison dans votre propre code et traitez un profil renvoyé comme authentifié uniquement une fois la liaison réussie.

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