• Aucun résultat trouvé

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

N/A
N/A
Protected

Academic year: 2022

Partager "Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs."

Copied!
19
0
0

Texte intégral

(1)

4D v12 et LDAP

Par Jesse PINA, Membre des Services techniques, 4D Inc.

Note technique 4D-201009-17-FR Version 1 - Date 1 septembre 2010

Résumé

Traduction de l'anglais par Djompolo Tandjigora, Ingénieur Contrôle Qualité 4D SAS.

La possibilité d'exécuter des scripts PHP dans 4D v12 a ouvert la possibilité d'utiliser LDAP au sein d'une application 4D. LDAP est un protocole largement utilisé pour accéder à "Directory Servers". L'intégration de serveurs LDAP dans des applications telles que Active Directory rend LDAP particulièrement utile pour faire des choses telles que la validation des identifiants de connexion et la recherche des informations utilisateur. Cette note technique couvre ce qu'est LDAP et fournit des exemples de code pour montrer l'aide de LDAP dans 4D, y compris l'utilisation la plus courante, qui est la mise en place d'un système de mot de passe partagé.

4D Notes techniques

Copyright © 1985-2010 4D SAS - Tous droits réservés

Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.

Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte.

L'auteur et 4D SAS déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.

Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SAS. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.

Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SAS.

4D, 4ème Dimension, 4D Server, ainsi que tous les logos sont des marques enregistrées de 4D SAS.

Windows,Windows NT, Vista, Windows 7, Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.

ICU © Copyright 1995-2010 International Business Machines Corporation and others - iODBC © Copyright 1995-2006: Open Linck Software - LibZip © Copyright 2006 Dieter Baron and Thomas Klausner. OpenSSL : OpenSSL Project for use in the OpenSSL Toolkit. - SYNAPSE © Copyright 1994-2010 Synapse Developement - XALAN © Copyright 2010 4D SAS/ XERCES © Copyright 2010 4D SAS - zLib © Copyright 1995-2010 Jean-Loup Gailly and Mark Adler.

Apple, Macintosh, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc. Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

(2)

4D v12 et LDAP

Résumé

La possibilité d'exécuter des scripts PHP dans 4D v12 permet l'utilisation de LDAP au sein d'une application 4D. LDAP est un protocole largement utilisé pour accéder à des services d'annuaire. L'intégration de serveurs LDAP dans des applications telles que Active Directory rend LDAP particulièrement utile pour permettre la validation des identifiants de connexion et la recherche des informations utilisateur. Cette note technique couvre ce qu'est LDAP et fournit des exemples de code pour montrer l'utilisation de LDAP dans 4D, y compris l'utilisation la plus courante, qui est la mise en place d'un système de mot de passe partagé.

Introduction

LDAP signifie “Lightweight Directory Access Protocol”. LDAP est utilisé pour accéder à des serveurs d'annuaire qui sont essentiellement des bases de données qui tiennent à jour leurs informations dans une arborescence. Les Serveurs LDAP peuvent stocker quasiment tout type d'information souhaitée, mais ils sont plus communément utilisés pour stocker des informations relatives aux utilisateurs du réseau. L'utilisation de LDAP au sein de Microsoft Active Directory, est particulièrement importante, car elle fournit un mécanisme permettant aux applications externes de l'interroger afin obtenir des information tels que les noms d'utilisateur, mots de passe et permissions.

Cette note technique vous donnera une brève introduction à LDAP, indiquera la façon dont on peut accéder aux fonctions LDAP à partir de 4D v12, et passera en revue quelques exemples d'utilisations courantes de LDAP.

Qu'est-ce que LDAP ?

Si vous voulez la définition technique, vous pouvez aller à la RFC 4510, qui stipule que LDAP est "un protocole Internet pour accéder à un annuaire de services distribués qui agissent en conformité avec les données X.500 et les modèles de service." En termes plus généraux, LDAP est un protocole qui permet aux annuaires d’information d’être accessibles à partir d'applications externes.

Ces annuaires d'information sont des bases de données. Ils sont parfois appelés annuaires LDAP, serveurs LDAP ou bases de données LDAP, mais dans la présente note technique, ils sont simplement appelés annuaires LDAP.

Une chose à préciser est que, si ces annuaires LDAP sont des bases de données, ils ne sont pas des bases de données relationnelles. Ces types de bases de données ont une structure spécifique et ont été conçus avec des objectifs bien précis. Pour être plus précis, les annuaires LDAP stockent leurs informations dans une structure hiérarchique (communément appelée "en arbre") et ils sont optimisés pour une lecture rapide. Bien qu’ils prennent en charge les opérations d'écriture, ils ne sont pas conçus pour les opérations d'écriture constante comme une base de données relationnelle.

Une fois qu’un annuaire LDAP a été créé, il peut être consulté par des applications externes qui utilisent le protocole LDAP.

(3)

Pourquoi LDAP-il important?

Il y a un certain nombre de raisons pour lesquelles les entreprises utilisent des annuaires LDAP. Tout d'abord, LDAP est multiplateforme. Cela permet à des applications externes sur n'importe qu'elle plate- forme d’être en mesure d'utiliser le protocole LDAP pour accéder à des annuaires LDAP.

LDAP est également basé sur des normes. C’est très intéressant, car cela rend, pour une grande part, le type de serveur qui agit comme annuaire LDAP non pertinent. La même norme est utilisée, de sorte que vous pouvez intégrer LDAP dans votre application sans avoir à vous préoccuper de l'accès à un annuaire LDAP spécifique. En allant un peu plus loin, une fois que vous avez intégré le code dans votre application, vous pouvez ensuite déployer la même application pour des systèmes multiples et il agira de la même manière dans tous les systèmes, car ils utilisent tous le même protocole basé sur des normes (LDAP).

Une autre raison d'utiliser LDAP est qu'il permet aux entreprises de disposer d'un référentiel unique d'informations d'identification utilisateur. Plutôt que d'avoir à configurer et à maintenir des informations d'identification utilisateur dans chaque application, les entreprises peuvent configurer un utilisateur une fois dans leur annuaire LDAP et puis demander à chaque application de se référer à cette celle-ci lors de l'authentification des utilisateurs. Avoir les informations utilisateur dans un emplacement central fournit également l'avantage supplémentaire de pouvoir facilement activer et désactiver l'accès d'un utilisateur pour tous les systèmes.

Voici quelques raisons supplémentaires pour lesquelles LDAP est populaire : l'octroi de licences est peu coûteux, la réplication et la synchronisation des tâches relativement simples, les serveurs LDAP sont accessibles (lecture et écriture), et les serveurs LDAP peuvent être contrôlés par un administrateur.

Enfin, voici quelques exemples du type d'information qui est généralement stocké dans un annuaire LDAP.

• Informations sur l’annuaire téléphonique de la compagnie ;

• Information du certificat et de la clé de sécurité ;

• Informations de connexion : les utilisateurs, les mots de passe, les groupes.

Ce dernier exemple est particulièrement important car de nombreuses applications se référant aux utilisateurs, tels que Microsoft Active Directory (AD), contiennent déjà les informations Utilisateur pour tous les utilisateurs sur un réseau. Comme les données sont déjà présentes dans ces applications, beaucoup d'entre elles intégrent les serveurs LDAP. Cela signifie que la plupart des entreprises, en général, soit utilisent déjà des annuaires LDAP ou peuvent facilement être amenées à les utiliser. Une large utilisation de ces applications facilite l'authentification unique pour n'importe quelle application externe qui prend en charge LDAP.

Note rapide : Cette première partie a été ajoutée pour fournir des informations concernant ce qu'est LDAP et ce qu'est un annuaire LDAP. Elle a été incluse afin de fournir un aperçu général, pour que vous puissiez mieux comprendre la façon d'intégrer LDAP dans une base de données 4D. Cette section n'est pas faite avec l'intention que vous, développeur 4D, mettiez en place un annuaire LDAP.

Configurer et d’administrer un annuaire LDAP est typiquement le rôle d'un ingénieur ou d’un administrateur réseau.

(4)

Accès LDAP à partir de 4D

L'utilisation de LDAP dans 4D v12 est rendue possible par l'intégration de PHP, et plus spécifiquement, par l'intégration du module PHP LDAP. Le module LDAP intègre un ensemble complet de fonctions LDAP qui peut être utilisé pour interagir avec les annuaires LDAP.

Par exemple, vous pouvez faire des actions telles que : rechercher une entrée (utilisateur), valider un mot de passe pour une entrée, ajouter/modifier/supprimer des entrées, et ajouter/modifier/supprimer des attributs d'entrée.

Vous pouvez trouver la documentation pour le module PHP, ainsi qu'une liste complète des fonctions LDAP disponibles au lien suivant:

http://us2.php.net/manual/book.ldap.php

L'exécution du code PHP à partir de 4D v12 est obtenue en utilisant la nouvelle commande PHP EXECUTER. Dans cette commande, vous spécifiez le chemin vers le fichier PHP, le nom de la fonction PHP, et les paramètres de la fonction PHP (si nécessaire), et l'endroit où le résultat est retourné. C'est la commande principale que nous allons utiliser pour accéder aux fonctions LDAP de PHP.

Il y a un certain nombre d'options disponibles avec l'utilisation de PHP dans 4D v12, y compris les options de gestion des erreurs, la définition des options PHP, l’utilisation d'autres interpréteurs PHP, et l'installation d'autres modules PHP, pour plus de détails, réfèrez-vous au manuel du langage 4D v12.

Syntaxe

Voici la syntaxe de base qui est utilisée dans la présente note technique pour appeler les fonctions LDAP de PHP.

//paramètres de mise en place

$param1:=”abc”

$param2:=”def”

$paramN:=”xyz”

//Mise en place du chemin d'accès du fichier PHP

$PHPFile:=”C:\\PATH_TO_PHP_FILE\\myFile.php”

Si (Tester chemin acces($PHPFile)=Est un document) //lancement du script PHP

$success:=PHP EXECUTER($PHPFile;"PHP_Function_Name";$result;$param1;$param2;…;$paramN) //Gestion des erreurs

Si (Non($success)) C_TEXTE($stdout)

TABLEAU TEXTE$errorLabels;0) TABLEAU TEXTE$errorValues;0)

PHP LIRE REPONSE COMPLETE($stdout;$errorLabels;$errorValues;$)

$result:="error: "+$errorValues{1}

(5)

Fin de si Sinon

$result:="error: PHP file not found"

Fin de si

//A ce stade $result contient soit le résultat du script PHP soit lerreur survenue.

Cette structure de base est utilisée pour créer des wrappers (conteneurs) pour les différentes fonctions PHP qui sont créées et utilisées dans la présente note technique. Remarquez l'utilisation de la commande PHP LIRE REPONSE COMPLETE pour extraire des informations supplémentaires lorsque des erreurs surviennent lors de l'exécution du script PHP. Par ailleurs, si cette structure syntaxique est utilisée pour exécuter des scripts LDAP de PHP, elle peut également être utilisée pour exécuter un script PHP.

Exemple - Système de mot de passe partagé

La mise en place d’un système de partage de mot de passe d'une application avec un annuaire LDAP est l'utilisation la plus courante de LDAP. Lors du partage du système de mot de passe, vous pouvez mettre en œuvre des choses telles que l’authentification unique, qui est le processus d'authentification d'un utilisateur une seule fois, et ayant recours à cette authentification pour de multiples applications. L'authentification unique élimine la demande des informations de connexion à l'utilisateur final à chaque application utilisée.

Elle centralise également le contrôle des droits d'accès.

Cela signifie qu'un utilisateur peut être installé dans un serveur supporté par LDAP, comme Active Directory, puis automatiquement bénéficier de tous les accès appropriés aux applications dont il a besoin. Si les utilisateurs ont besoin de modifier ou révoquer leurs accès, par exemple s'ils changent de département ou ne sont plus dans la société, ils ont juste besoin d'être mis à jour dans Active Directory, puis leurs accès aux diverses applications seront automatiquement mis à jour.

Maintenant, le processus qui vient d'être décrit ici ne concerne que la façon dont l'authentification unique fonctionne et non comment elle est mise en place. Pour mettre en œuvre l'authentification unique avec LDAP, chaque application devra comporter des fonctionnalités LDAP et l'accès aux informations d'identification authentifiée quand un utilisateur ouvre une session dans leur système.

4D v12 a une fonctionnalité LDAP, mais actuellement il n'y a pas de commande intégrée dans 4D (ou PHP) qui vous permet actuellement de connecter des noms d'utilisateurs et leur mot de passe. Ainsi, puisque la vraie authentification unique ne peut actuellement être implémentée avec le code 4D (et le module LDAP de PHP), les systèmes de mot de passe peuvent encore être partagés. La principale différence entre les deux méthodes étant qu’avec le système de mot de passe partagé, il sera nécessaire d'avoir une interaction avec l’utilisateur final (la saisie du nom d'utilisateur et mot de passe dans une application, par ex 4D) à un certain moment dans le processus.

Ce premier exemple montre comment authentifier un nom d'utilisateur et un mot de passe dans un annuaire LDAP.

Environnement des exemples

(6)

Pour exécuter les exemples inclus dans la présente note technique, vous avez besoin d'avoir accès à un serveur LDAP. Les exemples utilisent ici Active Directory comme serveur LDAP, mais il y a un certain nombre d'autres applications qui peuvent être utilisées comme serveur LDAP, dont certaines sont gratuites.

Voici quelques liens vers des applications LDAP gratuites : http://www.openldap.org/

http://directory.apache.org/

http://entic.net/LDAPBook https://opends.dev.java.net/

Exécution de l'exemple inclus

Le premier exemple de base de données incluse intègre le module LDAP, l'objectif étant d'authentifier un nom d'utilisateur et mot de passe avec une entrée valide dans un annuaire LDAP. Les instructions complètes pour exécuter cet exemple sont incluses dans le fichier Readme.txt inclus dans la présente note technique, mais en résumé, l’exécution de cet exemple nécessite 2 étapes :

Étape 1) Préciser les paramètres du annuaire LDAP.

Vous devez spécifier les :

• IP : L'adresse IP du serveur qui exécute le annuaire LDAP

• Port : Le port utilisé pour les communications client vers le annuaire LDAP.

Le port standard utilisé est de 389.

• Domaine : Le nom de domaine où l'utilisateur va se connecter.

Cela se fait en créant un enregistrement dans la table [LDAP_Preferences]. Le formulaire pour créer un enregistrement dans cette table peut être consulté à partir du dialogue de connexion en sélectionnant

"Ajouter nouveau serveur" dans la liste déroulante.

Ce qui nous amène alors au formulaire suivant :

(7)

C'est une tâche qui devrait être exécutée avant l'utilisation de la base de données par les utilisateurs finaux et qui serait généralement effectuée par un administrateur de la base de données.

Note : Il y a des champs supplémentaires dans cette boîte de dialogue, qui sont utilisés dans les autres exemples de la présente note technique.

Étape 2) Entrez le nom d'utilisateur, mot de passe, et sélectionnez le serveur.

Une fois que vous avez entré ces informations et cliqué sur "OK", la base de données contrôle si le nom d'utilisateur et mot de passe spécifiés correspondent à une entrée valable sur le annuaire LDAP.

Si une correspondance est trouvée et que le mot de passe correspond à l'identifiant, alors le message suivant est affiché.

(8)

Le message de succès est inclus seulement pour la présente note technique. Dans un scénario réel, en cas d'authentification LDAP réussie, vous connectez l'utilisateur à la base de données.

Si l'utilisateur est introuvable, ou si d'autres erreurs se produisent, s'affiche alors un message d'erreur détaillant la raison.

Voici quelques exemples :

(9)

Le code

Puisque la fonctionnalité LDAP est réalisée à partir d'un script PHP, nous commençons par examiner le code PHP qui sera exécuté. Voici la fonction PHP qui exécute l'authentification :

/**

* LDAP_authenticate_user

*

* This function attempts to perform an LDAP connect then a bind.

* If both commands are successful, the word "success" is returned.

* Otherwise the appropriate error message is returned.

*

* @param string $host IP of the LDAP server to connect to

* @param string $port port number of the LDAP server to connect to

* @param string $user username to look up in the LDAP server

* @param string $pass password that corresponds to the specified username

* on the LDAP Server

* @return string

*/

function LDAP_authenticate_user( $host, $port, $user, $pass) {

$ldap_con = ldap_connect($host, $port);

if ($ldap_con) {

$ldap_bind = ldap_bind($ldap_con, $user, $pass);

if($ldap_bind) { $result = "success";

} else {

$result = "error: invalid user credentials";

}

ldap_close($ldap_con);

} else {

$result = "error: could not connect";

}

return $result;

(10)

}

Note : le commentaire de l’en-tête est un style généralement utilisé pour documenter les fonctions PHP.

Les commandes principales de cette fonction sont ldap_connect et ldap_bind, puisqu’elles effectuent la connexion et l'authentification que nous voulons. Le reste du code gère essentiellement les erreurs.

La première ligne dans la fonction utilise la commande ldap_connect pour tenter d'établir une connexion avec le serveur LDAP en utilisant l'IP et le port spécifiés.

Si la connexion n'est pas réussie, alors la commande retourne Faux dans la variable $ldap_con. La prochaine ligne teste cette variable, et si la connexion a réussi, un ldap_bind est alors tenté.

La commande ldap_bind établie une liaison à l'annuaire LDAP avec les RDN spécifiés ("Relative Distinguished Name" ou nom unique relatif) et le mot de passe. Le RDN est dans ce cas le nom de domaine ainsi que le nom d'utilisateur, tels que mis en place dans l'annuaire LDAP, par exemple MonDomaine\Jesse.

Cette commande renvoie Vrai si la liaison est réussie et Faux si la liaison a échoué.

Enfin, indépendamment du fait que le ldap_bind ait été un succès, la commande ldap_close est exécutée pour fermer la connexion.

Ensuite, nous avons besoin d'une méthode 4D qui appelle la fonction PHP. Voici la méthode qui a été créée comme un ‘wrapper’ pour notre fonction PHP LDAP_authenticate_user:

// --- // Méthode: LDAP_authenticate

// Description

// Appel de la fonction PHP LDAP_authenticate_user.

//

// Paramètres

// $1 - IP du serveur LDAP auquel se connecter

// $2 - numéro de port du serveur LDAP auquel se connecter // $3 - nom d'utilisateur pour rechercher dans le serveur LDAP

// $4 - mot de passe correspondant au nom d'utilisateur spécifié sur le serveur LDAP //

// Returne

// $0 - "succès" ou un message d'erreur // --- C_TEXTE($0)

C_TEXTE($1;$2;$3;$4)

C_TEXTE($host_t;$port_t;$username_t;$password_t;$php_path_t;$result_t) C_BOOLEEN($success_f)

$host_t:=$1

$port_t:=$2

$username_t:=$3

$password_t:=$4

$php_path_t:=Dossier 4D(Dossier Resources courant)+"1 ldap auth.php"

Si (Tester chemin acces($php_path_t)=Est un document)

(11)

//Exécution de la fonction PHP,

//on stocke le résultat de la fonction dans la variable $result_t

$result_t:=""

$success_f:=PHP Executer($php_path_t;"LDAP_authenticate_user";$result_t;$host_t;$port_t;$username_t;

$password_t)

Si ((Non($success_f)) & ($result_t=""))

//une erreur inconnue s'est produite, capture de l'erreur C_TEXTE($stdout)

TABLEAU TEXTE($errorLabels;0) TABLEAU TEXTE($errorValues;0)

PHP LIRE REPONSE COMPLETE($stdout;$errorLabels;$errorValues)

$result_t:=$errorLabels{1}+Caractere(13)+$errorValues{1}

Fin de si Sinon

$result_t:="Fichier PHP introuvable"

Fin de si

$0:=$result_t

Dans cette méthode, après la déclaration de quelques variables, la commande PHP Executer est appelée.

C'est la commande qui exécute notre fonction PHP LDAP_authenticate_user. Si la fonction PHP s'exécute avec succès, alors la valeur retournée par le script PHP est enregistrée dans la variable $result_t, et

$success_f prend la valeur Vrai. Si une erreur se produit au cours de l'exécution du script PHP, alors

$success_f prend la valeur Faux.

Si une erreur PHP a eu lieu, nous lançons la commande PHP LIRE REPONSE COMPLETE pour récupérer les informations, et retourner la description et la valeur de la première erreur qui s'est produite.

A noter que nous avons la gestion des erreurs de code dans la fonction PHP et dans la méthode 4D. Nous pouvons anticiper et gérer la défaillance de fonction PHP lors de l'exécution des commandes ldap_connect et ldap_bind, ainsi nous avons inclus du code dans le PHP pour retourner le message d'erreur approprié dans ces cas. De retour dans la méthode 4D, nous avons alors du code 4D pour intercepter toutes les autres erreurs PHP qui peuvent se produire.

Enfin, il y a la Méthode-objet qui se déclenche lorsque l'utilisateur final clique sur le bouton OK de la boîte de dialogue. C'est la méthode qui déclenche l'appel de la méthode "wrapper" :

//appel de la méthode LDAP

$result_t:=LDAP_authenticate ($host_t;$port_t;$user_t;$pass_t) `indique si l'authentification a été réussie ou non

Si ($result_t="success") ...

Sinon ...

(12)

Fin de si

Cette méthode met en place les variables appropriées pour appeler la méthode wrapper, appelle la méthode, puis en fonction de la valeur de retour, affiche soit un message de succès soit un message d'échec. Dans un scénario réel, si vous récupérez le message "success", alors vous connectez l'utilisateur au système.

Pour aller plus loin

Le code de cet exemple peut être utilisé comme une base pour la mise en place d'un système de mot de passe partagé dans une base de données. Il y a un certain nombre d'options d’implémentation, qui dépendent toutes de bases de données individuelles et des préférences du développeur ou des utilisateurs finaux.

Par exemple, vous pouvez avoir une saisie d'un utilisateur, de ses informations d'identification la première fois qu'il se connecte à la base de données, sauvegarder cette information dans la base de données, puis authentifier par programmation l'utilisateur à chaque ouverture de la base de données à partir de cette machine.

Ceci est très pratique pour les utilisateurs finaux en ce sens qu'ils ne doivent entrer leurs informations d'identification qu’une seule fois et c’est très similaire au comportement de l'authentification unique. Une autre option sécurisée serait d'intégrer les groupes dans l'authentification. Vous pouvez créer un groupe au sein de l'annuaire LDAP pour les utilisateurs qui peuvent avoir accès à 4D (ex "Les utilisateurs 4D") puis ajouter les utilisateurs appropriés à ce groupe. Puis ajouter du code dans la fonction PHP pour vérifier et voir si l'utilisateur spécifié fait partie de ce groupe.

Exemple - LDAP en lecture et écriture

La section suivante couvre quelques différentes tâches LDAP de "lecture" et "écriture" qui peuvent être effectuées à partir de 4D.

Lecture

Dans cet exemple, nous allons faire une recherche sur un annuaire LDAP qui retourne tous les utilisateurs. Pour exécuter cet exemple, il suffit de sélectionner le menu "Demo-> Exemple 2", sélectionnez le serveur LDAP, puis cliquez sur le bouton de la requête. Cela exécute la "Requête"

prédéfinie sur l'annuaire LDAP qui retourne tous les utilisateurs. Notez que votre serveur LDAP sera nommé différemment de celui illustré dans la capture d'écran ci-dessous. Voir le fichier Readme.txt inclus pour plus de détails.

(13)

Le code fourni dans cet exemple est similaire au code à exécuter dans l'exemple précédent, la principale différence est le code PHP qui s'exécute. Voici le nouveau code PHP qui est introduit dans cet exemple:

if($ldap_bind) { //run the search

$sr=ldap_search($ldap_con, $domain, $query);

//get results back, which will be returned in a multi-dimensional array

$info = ldap_get_entries($ldap_con, $sr);

//iterate through the returned array and extract the needed information for ($i=0; $i<$info["count"]; $i++) {

$name = $info[$i]["givenname"][0] . " " . $info[$i]["sn"][0];

$email = $info[$i]["mail"][0];

$created = substr($info[$i]["whencreated"][0], 0, 8);

$theresult .= $dn . " " . $name . ", " . $email . ", " . $created . ";";

} } else {

$result = "error: invalid administrative credentials";

}

(14)

Après l'exécution de la commande LDAP_search, la commande LDAP_get_entries est utilisée pour retourner un tableau multidimensionnel avec toutes les informations de l'utilisateur. Donc tout ce que nous devons faire à ce stade est de parcourir le tableau et d'en extraire les données que nous voulons.

Dans notre cas, nous récupérons le nom, l'email et la date à laquelle le compte a été créé.

En outre, dans le code ci-dessus, la variable $query contient la recherche à effectuer, et dans notre exemple, nous utilisons la requête "(givenName =*)", que nous codons en dur dans l’appel de la méthode 4D. Il s'agit d'une syntaxe spécifique de requête LDAP, dans ce cas, l'astérisque "*" est un joker. Ainsi, la requête cherche n’importe quelle instruction sur l'annuaire LDAP où le champ

"givenName" a une valeur.

Effectuer une recherche de ce genre peut être très utile lors de la mise en place initiale d’un système de mots de passe 4D. Plutôt que d'avoir à saisir tous les utilisateurs et mots de passe dans une base de données 4D, il vous suffit de créer une routine pour trouver tous les utilisateurs sur un annuaire LDAP, puis créer ces utilisateurs dans 4D.

Ecriture

Dans cet exemple, nous allons ajouter une entrée (utilisateur) dans un annuaire LDAP. L'exemple suivant crée une nouvelle entrée avec un contenu prédéfini. Pour exécuter cet exemple, aller à l’onglet

«Écrire» dans le formulaire “Read & Write”, sélectionnez le serveur LDAP, puis cliquez sur le bouton

"Ajouter" (voir le fichier Readme.txt pour plus de détails).

Voici le nouveau code PHP qui est inclus dans cet exemple :

if($ldap_bind) {

//build the PHP array that will hold the contents of the entry to add

$count = count($fields);

for ($i = 0; $i < $count ; $i++) {

$newEntry[$fields[$i]] = $values[$i];

}

//attempt the actual adding

$ldap_add = ldap_add($ldap_con, $dn, $newEntry);

if($ldap_add) {

$theresult="success";

} else {

$theresult = "error: could not run ldap_add";

} } else {

$theresult = "could not authenticate administrative user";

}

Dans le code ci-dessus, nous sommes principalement intéressés par les 2 tableaux : $fields et $values qui contiennent les attributs et les valeurs correspondantes, pour l'entrée à ajouter. Ces valeurs sont

(15)

mises dans 4D et passées à la méthode PHP. La méthode PHP construit ensuite un tableau des champs et des valeurs et passe alors ce nouveau tableau en tant que paramètre dans la commande ldap_add.

Remarque : Le seul tableau construit dans le code ci-dessus est dans un format "Key value". Il s'agit d'un format spécial PHP pour les tableaux. Pour plus d'informations concernant les tableaux en PHP, consultez le lien suivant : http://php.net/manual/en/language.types.array.php

L'utilisateur prédéfini que nous essayons d'ajouter a pour nom "Frank Franklin". Voici un exemple de ce que vous verriez dans l'annuaire LDAP (Active Directory dans le cas présent) après que le code soit exécuté :

Une chose à mentionner est qu’une tâche "écriture" est considérée plus comme un type de tâche administrative. En règle générale, seul un ingénieur/administrateur du réseau serait en mesure d'avoir accès en écriture sur un annuaire LDAP. Ainsi, implémenter de telles tâches serait plus utile si vous concevez une application devant être utilisée par un ingénieur/administrateur du réseau. Par exemple, vous pouvez ajouter des fonctionnalités à une base de données qui permettrait l'administration à distance d'un annuaire LDAP. Autrement dit, vous souhaitez effectuer des tâches telles que : l'ajout d'utilisateurs, la suppression d'utilisateurs, l'ajout d'attributs, la modification des attributs, et l'ajout d'utilisateurs à des groupes.

Enfin, comme mentionné précédemment, LDAP a été conçu pour les opérations de «lecture» rapide, comme l'interrogation, par opposition à des opérations d'"écriture", telles que créer, mettre à jour et supprimer. Ainsi, alors que l'interrogation d'un serveur LDAP va être rapide, "écrire" des opérations

(16)

sera plus lente. S'il vous plaît gardez cela à l'esprit lors de l'élaboration d'un système qui effectue des opérations d'écriture sur un serveur LDAP.

Conclusion

Cette note technique a donné une introduction au protocole LDAP et a montré comment il peut être intégré dans une base de données 4D v12. Cela ouvre de nouvelles possibilités permettant de relier les systèmes de mots de passe dans 4D avec n'importe quel annuaire LDAP d’entreprise. Ce type de fonctionnalité donne plus de sécurité à la base de données 4D, ce qui est, en fin de compte, ce que veulent la plupart des clients.

Pour plus d'informations

Voici quelques liens vers la documentation pour les différentes technologies traitées dans la présente Note technique :

http://php.net/ldap - documentation et des exemples pour le module LDAP de PHP

http://www.ietf.org/rfc/rfc4510.txt - Texte complet de RFC 4510, qui décrit en détail le protocole .

(17)

Instructions pour exécuter les exemples inclus.

Exigence: Un serveur LDAP devra être installé avant l'exécution de ces exemples.

Exemple 1 :

• A partir du mode d'application sélectionner le menu "Exemple 1" ;

• Dans le formulaire "Login" qui est maintenant affiché, cliquez sur le "Serveur" dans la liste déroulante et sélectionnez l'option "Ajouter nouveau serveur". Cela permet d'afficher le formulaire des préférences du "serveur LDAP" pour la création des informations nécessaires à la connexion au serveur LDAP.

• Dans ce formulaire, entrez les informations suivantes :

1) Nom d'hôte -> un identifiant de l'enregistrement à créer 2) IP -> l'adresse IP de la machine qui exécute le serveur LDAP

3) Port -> le port à partir duquel le serveur LDAP accepte les demandes

4) Domaine -> nom de domaine au sein du serveur LDAP qui inclut le compte d'utilisateur qui sera authentifié.

• Cliquez sur OK.

• Retour sur le formulaire "Login", sélectionnez le serveur vient d'être ajouté à partir de la liste déroulante du "serveur".

• Entrez un nom d'utilisateur et le mot de passe correspondant, pour l'utilisateur dans le serveur LDAP que vous voulez authentifier.

• Cliquez sur OK -

Résultat : Un message d'alerte vous indique si l'authentification a réussi. Sinon, un message d'erreur s'affiche.

Exemple 2a (Lire) :

• A partir du mode d'application de sélectionner le menu "Exemple 2" ;

• Dans le formulaire "Lecture et écriture" qui est maintenant affiché, passez à l'onglet "Lire".

• (Si nécessaire) Sélectionnez l'option "Ajouter nouveau serveur" dans la liste déroulante du "Server".

• (Si nécessaire) Dans ce formulaire, entrez les informations suivantes : 1) Nom d'hôte -> un identifiant de l'enregistrement à créer 2) IP -> l'adresse IP de la machine qui exécute le serveur LDAP 3) Port -> le port à partir duquel le serveur LDAP accepte les requêtes

4) Port de recherche-> le port pour lequel le serveur LDAP accepte les demandes de recherche 5) Nom de domaine -> nom de domaine au sein du serveur LDAP qui comprend les comptes d'utilisateurs recherchés

6) Nom d'utilisateur Admin -> le nom d'un utilisateur administrateur au sein du serveur LDAP (ce qui est nécessaire pour exécuter le Ldap_search)

(18)

7) Mot de passe Admin -> le mot de passe correspondant au nom d'utilisateur administrateur spécifié

8) DN -> la partie du Champ Nom Unique (DN) qui spécifie l'endroit où l'utilisateur sera créé.

Pour ceux qui ne connaissent pas la notion de DN, voici quelques liens qui expliquent ce que c'est :

http://www.ldapman.org/articles/intro_to_ldap.html structure # http://www.zytrax.com/books/ldap/apa/dn-rdn.html

• (Si nécessaire) Cliquez sur OK.

• Retour sur le formulaire "Lecture et écriture" sélectionnez un serveur dans la liste déroulante du

"Server".

• Cliquez sur "Query"

Résultat : Ceci va remplir la liste avec les résultats de la requête qui a été exécutée ("(givenName =*)"

pour être précis).

Exemple 2a (écriture) :

• A partir du mode Application sélectionner le menu "Exemple 2".

• Dans le formulaire "Lecture et écriture" qui est maintenant affiché, passez à l'onglet «Écrire».

• (Si nécessaire) Sélectionnez l'option "Ajouter nouveau serveur" dans la liste déroulante du "Server".

• (Si nécessaire) Dans ce formulaire, entrez les informations suivantes : 1) Nom d'hôte -> un identifiant de l'enregistrement à créer 2) IP -> l'adresse IP de la machine qui exécute le serveur LDAP 3) Port -> le port à partir duquel le serveur LDAP accepte les requêtes

4) Port de Recherche -> le port sur lequel le serveur LDAP accepte les demandes de recherche 5) Nom de Domaine -> nom de domaine du serveur LDAP qui comprend les comptes d'utilisateurs recherchés

6) Nom d'utilisateur Admin -> le nom d'un utilisateur administratif au sein du serveur LDAP (ce qui est nécessaire pour exécuter le ldap_search)

7) Mot de passe Admin -> le mot de passe correspondant au nom d'utilisateur administrateur spécifié

8) DN -> la partie du Champ Nom Unique (DN) qui spécifie l'endroit où l'utilisateur sera créé.

Pour ceux qui ne connaissent pas la notion de DN, voici quelques liens qui expliquent ce que c'est :

http://www.ldapman.org/articles/intro_to_ldap.html http://www.zytrax.com/books/ldap/apa/dn-rdn.html

• (Si nécessaire) Cliquez sur OK ;

• Retour sur le formulaire "Lecture et écriture", sélectionnez un serveur dans la liste déroulante du

"Server" ;

• Cliquez sur "Ajouter".

(19)

Résultat : Ceci va remplir la liste avec les résultats de la requête qui a été exécutée ("(givenName =*)"

pour être précis).

Références

Documents relatifs

❑ Le modèle d’information définit le type de données pouvant être stockées dans l’annuaire.. L’entrée (Entry) = élement de base

Pour plus d'informations sur la configuration de la stratégie de mot de passe et de verrouillage de compte sur le serveur, reportez-vous au chapitre relatif à la gestion des

Ce document est de donner les bases nécessaires pour la création d'un annuaire LDAP qui sera utilisé pour l'authentification de comptes UNIX et Samba sur un serveur

Si le DN correspondant à cet utilisateur (i.e. uid=username, ou=People, dc=limsi, dc=fr) est enregistré en tant que membre de l’entrée ou=infoAdm, ou=metaGroups, dc=limsi, dc=fr et

Courrier arrivé enregistré par l’utilisateur « BOG1 », ré- envoyé pour orientation (avec instructions d’orientation) ou ré-envoyé par les structures pour erreur

Cette note technique explique comment envoyer un email à partir d’un serveur de messagerie qui nécessite l’authentification.. Au lieu d’utiliser

À compter de la version 6, BBedit offre un outil de ligne de commande pour ouvrir et créer des fichiers texte Unix depuis le Terminal.. Par exemple, voici la ligne de commande à

 Chaque entrée de l’annuaire fait obligatoirement référence à une classe d’objet du schéma..  Une classe d’objet est