Actions

LDAP settings/fr: Difference between revisions

From LimeSurvey Manual

Maren.fritz (talk | contribs)
Created page with "Attention : lorsqu'un '''nom d'attribut ldap''' est requis dans l'un de ces paramètres, '''utilisez uniquement des noms en minuscules''' : par exemple displayname et NON disp..."
Maren.fritz (talk | contribs)
Created page with "Trouvez plus d'informations sur la structure Active Directory LDAP sur [https://technet.microsoft.com/en-us/library/bb727030.aspx Active Directory Architecture] et [https://ms..."
 
(26 intermediate revisions by the same user not shown)
Line 42: Line 42:
Attention : lorsqu'un '''nom d'attribut ldap''' est requis dans l'un de ces paramètres, '''utilisez uniquement des noms en minuscules''' : par exemple displayname et NON displayName.
Attention : lorsqu'un '''nom d'attribut ldap''' est requis dans l'un de ces paramètres, '''utilisez uniquement des noms en minuscules''' : par exemple displayname et NON displayName.


Please refer to the config/ldap.php file as it contains samples configuration.
Veuillez vous référer au fichier config/ldap.php car il contient des exemples de configuration.


=== Simple Queries===
=== Requêtes simples ===


Let's begin with simples queries. These queries only filter LDAP entries based on their own attributes and location. They are usually enough for querying ActiveDirectory.
Commençons par des requêtes simples. Ces requêtes filtrent uniquement les entrées LDAP en fonction de leurs propres attributs et emplacement. Ils sont généralement suffisants pour interroger ActiveDirectory.
*'''$query_id:''' is the id of the LDAP query;
*'''$query_id:''' est l'identifiant de la requête LDAP;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'ldapServerId']:''' Binds the query to a specific server;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'ldapServerId']:''' Lie la requête à un serveur spécifique;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'name']:''' String describing the query. It will be displayed in the GUI;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'name']:''' Chaîne décrivant la requête. Il sera affiché dans l'interface graphique ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userbase']:''' Root DN to use for user searches;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userbase']:''' Nom distinctif racine à utiliser pour les recherches d'utilisateurs ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userfilter']:''' It is a filter used to select potential users' entries. It must be enclosed in parentheses;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userfilter']:''' Il s'agit d'un filtre utilisé pour sélectionner les entrées des utilisateurs potentiels. Il doit être mis entre parenthèses ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userscope']:''' scope of the LDAP search for users ('base', 'one' or 'sub');
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userscope'] :''' périmètre de la recherche LDAP des utilisateurs ('base', 'one' ou 'sub');
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'firstname_attr']:''' Ldap attribute that will be mapped to the Firstname field of the token entry;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'firstname_attr'] :''' Attribut Ldap qui sera mappé au champ Prénom de l'entrée du jeton ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'lastname_attr']:''' Ldap attribute that will be mapped to the Lastname field of the token entry;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'lastname_attr'] :''' Attribut Ldap qui sera mappé au champ Lastname de l'entrée du jeton ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'email_attr']:''' Ldap attribute that will be mapped to the email address field of the token entry.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'email_attr'] :''' Attribut Ldap qui sera mappé au champ d'adresse e-mail de l'entrée du jeton.


Optionally, you can retrieve more information from the directory:
En option, vous pouvez récupérer plus d'informations à partir du répertoire :
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'token_attr']:''' Ldap attribute that will be mapped to the token code;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'token_attr'] :''' Attribut Ldap qui sera mappé au code du jeton ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'language']:''' Ldap attribute that will be mapped to the user language code;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'langue']:''' attribut Ldap qui sera mappé au code de langue de l'utilisateur;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'attr1']:''' Ldap attribute that will be mapped to the attribute_1 field;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'attr1'] :''' Attribut Ldap qui sera mappé au champ attribut_1 ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'attr2']:''' Ldap attribute that will be mapped to the attribute_2 field.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'attr2'] :''' Attribut Ldap qui sera mappé au champ attribut_2.


=== Combined Group Queries with DN members===
=== Requêtes de groupe combinées avec les membres DN ===


Let's now see how to define a more complicated query.
Voyons maintenant comment définir une requête plus compliquée.


The following queries use a first LDAP search that looks into LDAP groups. An LDAP group is an LDAP entry containing references to users' entries in the form of:
Les requêtes suivantes utilisent une première recherche LDAP qui examine les groupes LDAP. Un groupe LDAP est une entrée LDAP contenant des références aux entrées des utilisateurs sous la forme de :
* user ids (for instance posixGroups do)    ==> See the next section
* identifiants utilisateur (par exemple posixGroups do) ==> Voir la section suivante
* Or user DNs (for instance groupofnames and groupofuniquenames do) ==> see below
* Ou noms distinctifs d'utilisateur (par exemple groupofnames et groupofuniquenames faire) ==> voir ci-dessous


<u>Here we deal with groups containing user DNs:</u>
<u>Nous traitons ici des groupes contenant des DN d'utilisateurs :</u>  
*define $query_id, $ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'ldapServerId'], $ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'name'] as explained above.
*define $query_id, $ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'ldapServerId'], $ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'nom'] comme expliqué ci-dessus.


Then define the group filter parameters:
Définissez ensuite les paramètres du filtre de groupe :
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupbase']:''' The Root DN from which you want to start searching for group entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupbase']:''' Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupfilter']:''' The LDAP filter that will select potential group entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupfilter']:''' Le filtre LDAP qui sélectionnera les entrées de groupe potentielles;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupscope']:''' The scope of the LDAP search for groups ('on', 'base' or 'sub');
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupscope']:''' La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupmemberattr']:''' The Name of the LDAP attribute in the group entry that will contain references to users' entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupmemberattr']:''' Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupmemberisdn']:''' '''TRUE'''.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupmemberisdn']:''' '''VRAI'''.


At this point, everything is set up to let the first LDAP search find users corresponding to the selected groups. However, you can restrict which of these "user candidates" will be selected by applying another filter on them. This is, of course, optional:
A ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les utilisateurs correspondant aux groupes sélectionnés. Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en leur appliquant un autre filtre. Ceci est bien sûr facultatif :
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userbase']:''' Base DN for the user LDAP search (only user candidate matching this base) will be selected;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userbase']:''' Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userscope']:''' Scope for the user LDAP search (only user candidate matching the userbase+scope) will be selected;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userscope'] :''' La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userfilter']:''' It is a filter that applies to each user candidate entry (on its attributes) to add another selection.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userfilter']:''' C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.


=== Combined Group Queries with UID members===
=== Requêtes de groupe combinées avec des membres UID ===


Let's now see how to define a combined Group query when group members are user UIDs and not User DNs.
Voyons maintenant comment définir une requête de groupe combinée lorsque les membres du groupe sont des UID d'utilisateur et non des DN d'utilisateur.


As for the Group queries with DNs members, these queries use a first LDAP search that looks for LDAP groups entries and get their members. These members values are then used in a user search filter to search for corresponding entries. Thus another parameter must be configured to define the user attribute in the user's entry that should match the member UID found in the groups.
Quant aux requêtes de groupe avec des membres DN, ces requêtes utilisent une première recherche LDAP qui recherche les entrées des groupes LDAP et récupère leurs membres. Ces valeurs de membres sont ensuite utilisées dans un filtre de recherche utilisateur pour rechercher les entrées correspondantes. Ainsi, un autre paramètre doit être configuré pour définir l'attribut utilisateur dans l'entrée de l'utilisateur qui doit correspondre à l'UID du membre trouvé dans les groupes.


<u>Let's review the required parameters:</u>
<u>Passons en revue les paramètres requis :</u>  
*define $query_id, $ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'ldapServerId'], $ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'name'] as explained above
*define $query_id, $ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'ldapServerId'], $ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'nom'] comme expliqué ci-dessus


Then define the group filter parameters:
Définissez ensuite les paramètres du filtre de groupe :
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupbase']:''' The Root DN from which you want to start searching for group entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupbase']:''' Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupfilter']:''' The LDAP filter that will select potential group entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupfilter']:''' Le filtre LDAP qui sélectionnera les entrées potentielles du groupe ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupscope']:''' The scope of the LDAP search for groups ('on', 'base' or 'sub');
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupscope']:''' La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'groupmemberattr']:''' The name of the LDAP attribute in the group entry that will contain references to users' entries;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'groupmemberattr']:''' Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>''''groupmemberisdn'''']:''' '''FALSE''';
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> ''''groupmemberisdn'''']:''' '''FALSE''';
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>''''useridattr'''']:''' name of the user attribute that must match the UID found in the group members.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> ''''useridattr''''] :''' nom de l'attribut utilisateur qui doit correspondre à l'UID trouvé dans les membres du groupe.


At this point everything is set up to let the first LDAP search find users UIDs corresponding to selected groups and a user search filter will be automatically filled.
À ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les UID des utilisateurs correspondant aux groupes sélectionnés et un filtre de recherche d'utilisateurs sera automatiquement rempli.


However, you can restrict which of these 'user candidates' will be selected by completing the automatic user filter computed from member UIDs. This is, of course, optional:
Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en complétant le filtre utilisateur automatique calculé à partir des UID des membres. Ceci est bien sûr facultatif :
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userbase']:''' Base DN for the user LDAP search (only user candidate matching this base) will be selected;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userbase']:''' Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userscope']:''' Scope for the user LDAP search (only user candidate matching the userbase+scope) will be selected;
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userscope'] :''' La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
*'''$ldap_queries<nowiki>[</nowiki>$query_id]<nowiki>[</nowiki>'userfilter']:''' It is a filter that applies to each user candidate entry (on its attributes) to add another selection.
*'''$ldap_queries<nowiki> [</nowiki> $query_id]<nowiki> [</nowiki> 'userfilter']:''' C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.


=== What about Active Directory?===
=== Qu'en est-il d'Active Directory ?===


Active Directory (AD) is a Microsoft registry that can be queried by using the LDAP protocol.
Active Directory (AD) est un registre Microsoft qui peut être interrogé à l'aide du protocole LDAP.


It is then possible to use its content for LimeSurvey token queries, but this requires knowledge on how AD is organized.
Il est alors possible d'utiliser son contenu pour des requêtes de tokens LimeSurvey, mais cela nécessite de connaître l'organisation d'AD.
* The LDAP root base is dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1
* La base racine LDAP est dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1


==> For instance, if your company owns the DNS domain 'my-company.com' and your Windows domain is 'employees', then your root base is dc=employees,dc=my-company,dc=com
==> Par exemple, si votre entreprise possède le domaine DNS « mon-entreprise.com » et que votre domaine Windows est « employés », alors votre base racine est dc=employees,dc=my-company,dc=com
* Users and users-groups are stored below the cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (please note this is not ou=users);
* Les utilisateurs et les groupes d'utilisateurs sont stockés sous cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (veuillez noter qu'il ne s'agit pas de ou=users);
* Active Directory Groups:
* Groupes Active Directory :
** Groups objects contain DN of members in their 'member' attribute;
** Groupes les objets contiennent le DN des membres dans leur attribut 'member' ;
** Group memberships are also stored in the memberOf attribute of each user entry. This attribute contains DNs of groups the user belongs to;
** Les appartenances aux groupes sont également stockées dans l'attribut memberOf de chaque entrée utilisateur. Cet attribut contient les DN des groupes auxquels l'utilisateur appartient ;
** some groups are in CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
** certains groupes sont dans CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
*** For instance: cn=Administrator,CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;
*** Par exemple : cn=Administrator,CN =Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;


In some cases it is not as easy to query an active directory so here is a sample configuration for getting some infomations of an active directory:
Dans certains cas, il n'est pas aussi simple d'interroger un Active Directory. Voici donc un exemple de configuration pour obtenir des informations sur un Active Directory :


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
//Connection to the active directory Server:
//Connexion au Serveur Active Directory :
$serverId=0;
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId]['port'] = "389";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "none"; // Most AD LDAP servers will not have encryption set by default
$ldap_server[$serverId]['encrypt'] = "aucun"; // La plupart des serveurs AD LDAP n'auront pas de chiffrement défini par défaut
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user";
$ldap_server[$serverId]['binddn'] = "domain\\user ";
$ldap_server[$serverId]['bindpw'] = "userpassword";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx,DC=yyy"; this one will not work with active directory, that´s why you need to use "domain\\user"
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx ,DC=aaa"; celui-ci ne fonctionnera pas avec Active Directory, c'est pourquoi vous devez utiliser "domain\\user"  
//Here is a sample query for getting all active users of an active directory:
//Voici un exemple de requête pour obtenir tous les utilisateurs actifs d'un Active Directory :
$query_id=0;
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Staff with an enabled account';
$ldap_queries[$query_id]['name'] = 'Personnel avec un compte activé';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514)))';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) you are not able to ask active directory for an active user but you are able to ask for a non inactive user
//(!(userAccountControl=514)) vous ne pouvez pas demander à Active Directory un utilisateur actif mais vous pouvez demander un utilisateur non inactif
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Group filtering was not possible in active directory, you need to add the memberOf attribute of an user. Here is a sample query for getting all active users that are member of the group "samplegroup" in active directory:
//Le filtrage de groupe n'était pas possible dans Active Directory, vous devez ajouter l'attribut memberOf d'un utilisateur. Voici un exemple de requête pour obtenir tous les utilisateurs actifs membres du groupe « samplegroup » dans Active Directory :
$query_id++;
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'All members of samplegroup';
$ ldap_queries[$query_id]['name'] = 'Tous les membres du groupe d'échantillons';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl=514)))';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl=514 )))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Leave empty for Auto Token generation by phpsv
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['language'] = '';
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ldap_queries[$query_id]['attr2'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
</syntaxhighlight>
</syntaxhighlight>


Another example User query:
Un autre exemple de requête utilisateur :
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">  
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514''')))'; // AD doesn't recognise enabled accounts in the normal way, so instead, we check users are not disabled
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // AD ne reconnaît pas les comptes activés de la manière normale, nous vérifions donc que les utilisateurs ne sont pas désactivés
</syntaxhighlight>
</syntaxhighlight>  
* As suggested in the config file, consider adding (!(email=*)) to your user filters to ignore users with no email address.
* Comme suggéré dans le fichier de configuration, pensez à ajouter (!(email=*)) à vos filtres utilisateur pour ignorer les utilisateurs sans adresse e-mail.


Example group query:
Exemple de requête de groupe :


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Domain Admins))'; // AD doesn't use the standard attribute name for groups, so use this example instead.
$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Administrateurs de domaine))'; // AD n'utilise pas le nom d'attribut standard pour les groupes, utilisez donc plutôt cet exemple.
</syntaxhighlight>
</syntaxhighlight>


Find more information about the Active Directory LDAP structure on [https://technet.microsoft.com/en-us/library/bb727030.aspx Active Directory Architecture] and [https://msdn.microsoft.com/en-us/library/cc223122.aspx Active Directory Technical Specification].
Trouvez plus d'informations sur la structure Active Directory LDAP sur [https://technet.microsoft.com/en-us/library/bb727030.aspx Active Directory Architecture] et [https://msdn.microsoft.com/en-us/ library/cc223122.aspx Spécification technique Active Directory].

Latest revision as of 07:22, 28 September 2023

  Attention : Cette fonctionnalité permet aux administrateurs d'enquêtes LimeSurvey d'importer des jetons via LDAP. Si vous avez besoin d'une authentification LDAP, veuillez vous référer à Plugin AuthLDAP.


Général

Vous devez activer la prise en charge LDAP dans config.php et configurer les paramètres LDAP dans config/ldap.php afin d'utiliser cette fonction.

Template:Alerte

Activation de LDAP dans config.php

  • $enableLdap: si vous souhaitez utiliser les fonctions LDAP dans LimeSurvey, vous devez définir ce paramètre sur true (il est défini sur false par défaut) :
'config'=>array(
 'debug'=>0,
 'debugsql'=>0,
 'enableLdap'=>true,
 )

Définition des serveurs LDAP

Définissez d'abord les options de connexion au serveur LDAP dans "application/config/ldap.php". Pour chaque serveur, les options suivantes sont disponibles :

  • $serverId: Un entier qui identifie ce serveur LDAP. Il est utilisé dans les définitions de requêtes pour lier un serveur à une requête spécifique ;
  • $ldap_server [ $IDserveur] [ 'server'] : L'adresse IP ou le nom DNS du serveur LDAP. Si vous utilisez des connexions sécurisées SSL (LDAPs ou LDAP+Start-TLS), ce nom doit correspondre au Certificat CN (ou SubjectAlternativeName) du serveur ;
  • $ldap_server [ $IDserveur] [ 'protoversion']: Peut être 'ldapv2' ou 'ldapv3' selon le protocole pris en charge par votre serveur. « ldapv3 » est le protocole préféré. Cependant, si vous souhaitez utiliser des connexions cryptées, notez que LDAP est pris en charge en mode 'ldapv2' alors que Start-TLS est la méthode de cryptage pour 'ldapv3';
  • $ldap_server [ $IDserveur] [ 'encrypt']: Définit la méthode de cryptage utilisée. 'ldaps' est pris en charge pour les serveurs 'ldav2', 'start-tls' pour les serveurs 'ldapv3'. Le mot clé 'none' est utilisé pour les communications LDAP en clair ;
    • N'oubliez pas que pour le chiffrement 'ldaps' ou 'start-tls', le serveur web doit être capable de vérifier le certificat du serveur LDAP. Ainsi, vous devez définir votre autorité de certification dans votre bibliothèque openldap (généralement cela se fait dans le fichier /etc/openldap/ldap.conf sous Linux).
  • $ldap_server [ $IDserveur] [ 'referrals']: C'est un paramètre booléen qui définit si les références doivent être suivies ou non (utilisez false pour ActiveDirectory);
  • $ldap_server [ $IDserveur] [ 'encoding']: C'est un paramètre optionnel qui donne l'encodage utilisé par l'annuaire LDAP pour stocker les chaînes. Vous n'avez généralement pas besoin de configurer ce paramètre car le codage par défaut, « utf-8 », est le codage standard pour les annuaires LDAP. Cependant, si vous utilisez Active Directory et rencontrez des problèmes pour importer des chaînes accentuées, essayez de configurer ce paramètre sur l'encodage utilisé dans votre région (par exemple « cp850 » pour l'Europe occidentale). Vous pouvez vous référer à la liste déroulante « Jeu de caractères du fichier » dans l'interface graphique Import Token from CSV file pour avoir la liste complète des encodages pris en charge.

Ensuite, vous devez définir quelle authentification est nécessaire pour accéder au répertoire. Si l'accès « anonyme » est autorisé, ne définissez PAS les deux paramètres suivants, sinon définissez-les en conséquence :

  • $ldap_server [ $IDserveur] [ 'binddn']: DN de l'utilisateur 'LDAP' autorisé à lire l'annuaire;
  • $ldap_server [ $IDserveur] [ 'bindpw'] : Mot de passe de l'utilisateur LDAP ci-dessus.

Si vous devez définir d'autres serveurs LDAP, ajoutez la ligne suivante pour incrémenter le serverID et définir de nouveaux paramètres :

  • $serverId++.

Définition des requêtes dans config/ldap.php

Attention : lorsqu'un nom d'attribut ldap est requis dans l'un de ces paramètres, utilisez uniquement des noms en minuscules : par exemple displayname et NON displayName.

Veuillez vous référer au fichier config/ldap.php car il contient des exemples de configuration.

Requêtes simples

Commençons par des requêtes simples. Ces requêtes filtrent uniquement les entrées LDAP en fonction de leurs propres attributs et emplacement. Ils sont généralement suffisants pour interroger ActiveDirectory.

  • $query_id: est l'identifiant de la requête LDAP;
  • $ldap_queries [ $query_id] [ 'ldapServerId']: Lie la requête à un serveur spécifique;
  • $ldap_queries [ $query_id] [ 'name']: Chaîne décrivant la requête. Il sera affiché dans l'interface graphique ;
  • $ldap_queries [ $query_id] [ 'userbase']: Nom distinctif racine à utiliser pour les recherches d'utilisateurs ;
  • $ldap_queries [ $query_id] [ 'userfilter']: Il s'agit d'un filtre utilisé pour sélectionner les entrées des utilisateurs potentiels. Il doit être mis entre parenthèses ;
  • $ldap_queries [ $query_id] [ 'userscope'] : périmètre de la recherche LDAP des utilisateurs ('base', 'one' ou 'sub');
  • $ldap_queries [ $query_id] [ 'firstname_attr'] : Attribut Ldap qui sera mappé au champ Prénom de l'entrée du jeton ;
  • $ldap_queries [ $query_id] [ 'lastname_attr'] : Attribut Ldap qui sera mappé au champ Lastname de l'entrée du jeton ;
  • $ldap_queries [ $query_id] [ 'email_attr'] : Attribut Ldap qui sera mappé au champ d'adresse e-mail de l'entrée du jeton.

En option, vous pouvez récupérer plus d'informations à partir du répertoire :

  • $ldap_queries [ $query_id] [ 'token_attr'] : Attribut Ldap qui sera mappé au code du jeton ;
  • $ldap_queries [ $query_id] [ 'langue']: attribut Ldap qui sera mappé au code de langue de l'utilisateur;
  • $ldap_queries [ $query_id] [ 'attr1'] : Attribut Ldap qui sera mappé au champ attribut_1 ;
  • $ldap_queries [ $query_id] [ 'attr2'] : Attribut Ldap qui sera mappé au champ attribut_2.

Requêtes de groupe combinées avec les membres DN

Voyons maintenant comment définir une requête plus compliquée.

Les requêtes suivantes utilisent une première recherche LDAP qui examine les groupes LDAP. Un groupe LDAP est une entrée LDAP contenant des références aux entrées des utilisateurs sous la forme de :

  • identifiants utilisateur (par exemple posixGroups do) ==> Voir la section suivante
  • Ou noms distinctifs d'utilisateur (par exemple groupofnames et groupofuniquenames faire) ==> voir ci-dessous

Nous traitons ici des groupes contenant des DN d'utilisateurs :

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'nom'] comme expliqué ci-dessus.

Définissez ensuite les paramètres du filtre de groupe :

  • $ldap_queries [ $query_id] [ 'groupbase']: Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
  • $ldap_queries [ $query_id] [ 'groupfilter']: Le filtre LDAP qui sélectionnera les entrées de groupe potentielles;
  • $ldap_queries [ $query_id] [ 'groupscope']: La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: VRAI.

A ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les utilisateurs correspondant aux groupes sélectionnés. Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en leur appliquant un autre filtre. Ceci est bien sûr facultatif :

  • $ldap_queries [ $query_id] [ 'userbase']: Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
  • $ldap_queries [ $query_id] [ 'userscope'] : La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
  • $ldap_queries [ $query_id] [ 'userfilter']: C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.

Requêtes de groupe combinées avec des membres UID

Voyons maintenant comment définir une requête de groupe combinée lorsque les membres du groupe sont des UID d'utilisateur et non des DN d'utilisateur.

Quant aux requêtes de groupe avec des membres DN, ces requêtes utilisent une première recherche LDAP qui recherche les entrées des groupes LDAP et récupère leurs membres. Ces valeurs de membres sont ensuite utilisées dans un filtre de recherche utilisateur pour rechercher les entrées correspondantes. Ainsi, un autre paramètre doit être configuré pour définir l'attribut utilisateur dans l'entrée de l'utilisateur qui doit correspondre à l'UID du membre trouvé dans les groupes.

Passons en revue les paramètres requis :

  • define $query_id, $ldap_queries [ $query_id] [ 'ldapServerId'], $ldap_queries [ $query_id] [ 'nom'] comme expliqué ci-dessus

Définissez ensuite les paramètres du filtre de groupe :

  • $ldap_queries [ $query_id] [ 'groupbase']: Le DN racine à partir duquel vous souhaitez commencer la recherche d'entrées de groupe ;
  • $ldap_queries [ $query_id] [ 'groupfilter']: Le filtre LDAP qui sélectionnera les entrées potentielles du groupe ;
  • $ldap_queries [ $query_id] [ 'groupscope']: La portée de la recherche LDAP des groupes ('on', 'base' ou 'sub');
  • $ldap_queries [ $query_id] [ 'groupmemberattr']: Le nom de l'attribut LDAP dans l'entrée de groupe qui contiendra les références aux entrées des utilisateurs ;
  • $ldap_queries [ $query_id] [ 'groupmemberisdn']: FALSE;
  • $ldap_queries [ $query_id] [ 'useridattr'] : nom de l'attribut utilisateur qui doit correspondre à l'UID trouvé dans les membres du groupe.

À ce stade, tout est configuré pour permettre à la première recherche LDAP de trouver les UID des utilisateurs correspondant aux groupes sélectionnés et un filtre de recherche d'utilisateurs sera automatiquement rempli.

Cependant, vous pouvez restreindre lesquels de ces « candidats utilisateurs » seront sélectionnés en complétant le filtre utilisateur automatique calculé à partir des UID des membres. Ceci est bien sûr facultatif :

  • $ldap_queries [ $query_id] [ 'userbase']: Le DN de base pour la recherche LDAP de l'utilisateur (uniquement le candidat utilisateur correspondant à cette base) sera sélectionné ;
  • $ldap_queries [ $query_id] [ 'userscope'] : La portée de la recherche LDAP de l'utilisateur (seuls les candidats utilisateurs correspondant à la base utilisateur+portée) sera sélectionnée ;
  • $ldap_queries [ $query_id] [ 'userfilter']: C'est un filtre qui s'applique à chaque entrée utilisateur candidat (sur ses attributs) pour ajouter une autre sélection.

Qu'en est-il d'Active Directory ?

Active Directory (AD) est un registre Microsoft qui peut être interrogé à l'aide du protocole LDAP.

Il est alors possible d'utiliser son contenu pour des requêtes de tokens LimeSurvey, mais cela nécessite de connaître l'organisation d'AD.

  • La base racine LDAP est dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1

==> Par exemple, si votre entreprise possède le domaine DNS « mon-entreprise.com » et que votre domaine Windows est « employés », alors votre base racine est dc=employees,dc=my-company,dc=com

* Les utilisateurs et les groupes d'utilisateurs sont stockés sous cn=Users,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1 (veuillez noter qu'il ne s'agit pas de ou=users);
  • Groupes Active Directory :
    • Groupes les objets contiennent le DN des membres dans leur attribut 'member' ;
    • Les appartenances aux groupes sont également stockées dans l'attribut memberOf de chaque entrée utilisateur. Cet attribut contient les DN des groupes auxquels l'utilisateur appartient ;
    • certains groupes sont dans CN=Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1:
      • Par exemple : cn=Administrator,CN =Builtin,dc=my_windows_domain_name,dc=dns_suffix2,dc=dns_suffix1;

Dans certains cas, il n'est pas aussi simple d'interroger un Active Directory. Voici donc un exemple de configuration pour obtenir des informations sur un Active Directory :

//Connexion au Serveur Active Directory :
$serverId=0;
$ldap_server[$serverId]['server'] = "10.10.10.10";
$ldap_server[$serverId] ['port'] = "389";
$ldap_server[$serverId]['protoversion'] = "ldapv2";
$ldap_server[$serverId]['encrypt'] = "aucun"; // La plupart des serveurs AD LDAP n'auront pas de chiffrement défini par défaut 
$ldap_server[$serverId]['referrals'] = false;
$ldap_server[$serverId]['binddn'] = "domain\\user ";
$ldap_server[$serverId]['bindpw'] = "userpassword";
//$ldap_server[$serverId]['binddn'] = "CN=user,OU=user_group,DC=xxx ,DC=aaa"; celui-ci ne fonctionnera pas avec Active Directory, c'est pourquoi vous devez utiliser "domain\\user" 
//Voici un exemple de requête pour obtenir tous les utilisateurs actifs d'un Active Directory :
$query_id=0 ;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ldap_queries[$query_id]['name'] = 'Personnel avec un compte activé';
$ldap_queries[$query_id] ['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
$ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(!(userAccountControl=514) ))';
//(!(userAccountControl=514)) vous ne pouvez pas demander à Active Directory un utilisateur actif mais vous pouvez demander un utilisateur non inactif
$ldap_queries[$query_id][ 'userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$query_id]['lastname_attr'] = 'sn';
 $ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';
//Le filtrage de groupe n'était pas possible dans Active Directory, vous devez ajouter l'attribut memberOf d'un utilisateur. Voici un exemple de requête pour obtenir tous les utilisateurs actifs membres du groupe « samplegroup » dans Active Directory :
$query_id++;
$ldap_queries[$query_id]['ldapServerId'] = 0;
$ ldap_queries[$query_id]['name'] = 'Tous les membres du groupe d'échantillons';
$ldap_queries[$query_id]['userbase'] = 'OU=USER_GROUP,DC=xxx,DC=yyy';
 $ldap_queries[$query_id]['userfilter'] = '(&(objectClass=user)(memberOf=CN=samplegroup,OU=Group Global,OU=USER_GROUP,DC=xxx,DC=yyy)(!(userAccountControl=514 )))';
$ldap_queries[$query_id]['userscope'] = 'sub';
$ldap_queries[$query_id]['firstname_attr'] = 'givenname';
$ldap_queries[$ query_id]['lastname_attr'] = 'sn';
$ldap_queries[$query_id]['email_attr'] = 'mail';
$ldap_queries[$query_id]['token_attr'] = ''; // Laisser vide pour la génération automatique de jetons par phpsv
$ldap_queries[$query_id]['langue'] = '';
$ldap_queries[$query_id]['attr1'] = '';
$ ldap_queries[$query_id]['attr2'] = '';

Un autre exemple de requête utilisateur :

 
$ldap_queries[$query_id]['userfilter'] = '(&('''objectCategory=Person''')(objectClass='''user''')(!('''userAccountControl=514' '')))'; // AD ne reconnaît pas les comptes activés de la manière normale, nous vérifions donc que les utilisateurs ne sont pas désactivés
  • Comme suggéré dans le fichier de configuration, pensez à ajouter (!(email=*)) à vos filtres utilisateur pour ignorer les utilisateurs sans adresse e-mail.

Exemple de requête de groupe :

$ldap_queries[$query_id]['groupfilter'] = '(&(objectClass='''group''')(cn=Administrateurs de domaine))'; // AD n'utilise pas le nom d'attribut standard pour les groupes, utilisez donc plutôt cet exemple.

Trouvez plus d'informations sur la structure Active Directory LDAP sur Active Directory Architecture et library/cc223122.aspx Spécification technique Active Directory.