Lightweight Directory Access Protocol (LDAP)

APIs et Authentification

Principales APIs pour LDAP

LDAP a été normalisé pour la première fois il y a 15 ans (à la date d'écriture de ce site, en 2008). Aussi, de nombreuses APIs clientes pour LDAP ont été développées, pour tous les langages de développement existant et possédant des capacités de connexion réseau, parmi lesquels :

Pour chaque langage, il existe une variété de bibliothèques permettant l'utilisation de LDAP. Les informations des sections suivantes concernent les principaux patterns rencontrés dans ces librairies.

Connexion et Authentification

En fonction de la bibliothèque utilisée et des options supportées par l'API utilisée, soit :

Généralement, la seconde version est utilisée par les bibliothèques supportant des extensions comme StartTLS, pour pouvoir envoyer la demande de création d'une session TLS avant d'envoyer les informations de connexion.

Par exemple, l'approche Java utilisant JNDI fonctionne sur le premier mode, et les informations de connexion doivent être indiquées avant de créer l'objet représentant la connexion à l'annuaire :

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389");    // LDAP Server URL (ldaps for SSL implicit encryption)
env.put(Context.SECURITY_AUTHENTICATION, "simple");         // Authentication type, can be SASL
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); // specify the username
env.put(Context.SECURITY_CREDENTIALS,"secret");             // specify the password

/*
 * Executing this command will do the connect and bind operations,
 * and a NamingException will be thrown if credentials are incorrect.
 */
DirContext ctx = new InitialDirContext(env);
				

Tandis que l'approche Java utilisant les classes JLDAP de Novell différencie la création de l'objet, la connexion et l'opération d'authentification (bindRequest), comme le montre l'exemple suivant :

LDAPConnection lc = new LDAPConnection();

try {
	// Connects to the LDAP Directory
	lc.connect("localhost", "10389");
	
	// Binds (authenticates) the user in order to open a session
	lc.bind(LDAPConnection.LDAP_V3, "uid=admin,ou=system", "secret");
	
	// Unbinds the connection
	lc.disconnect();
} catch (LDAPException e) {
	if (e.getResultCode() == LDAPException.INVALID_CREDENTIALS) {
		System.err.println("Invalid Credentials");
	} else {
		System.err.println("Unexpected error: " + e.getMessage());
	}
}
				

Suite [Ecrire ses requêtes LDAP] >>>