Jump to content

Extension:LDAPProvider

From mediawiki.org
This page is a translated version of the page Extension:LDAPProvider and the translation is 100% complete.

En tant que successeur de LDAPAuthentication2 [1][2] une pile d'extensions LDAP a été créée.‎ Elles doivent toutes interagir avec une ressource LDAP distante[3]. Cette extension a été créée pour faciliter et unifier la configuration et la maintenance. Elle fournit les classes et la configuration pour consulter les données provenant des ressources LDAP.

Manuel des extensions MediaWiki
LDAPProvider
État de la version : stable
Description Fournit une infrastructure commune pour se connecter à une ressource LDAP et lui envoyer des requêtes.
Auteur(s)
Dernière version 3.0.0-alpha
Politique de compatibilité Versions ponctuelles alignées avec MediaWiki. Le master n'est pas compatible arrière.
MediaWiki >= 1.39.0
Modifie la base
de données
Oui
Composer mediawiki/ldap-provider
Tables ldap_domains
Licence Licence publique générale GNU v2.0 ou ultérieur
Téléchargement
  • $wgCacheTime
  • $wgCacheType
  • $wgPreSearchUsernameModifierRegistry
  • $wgDefaultDomain
  • $wgDomainConfigs
  • $wgDomainConfigProvider
  • $wgClientRegistry
Téléchargements trimestriels 413 (Ranked 8th)
Traduire l’extension LDAPProvider sur translatewiki.net si elle y est disponible
Problèmes Tâches ouvertes · Signaler un bogue

Installation

  • Téléchargez et placez le(s) fichier(s) dans un répertoire appelé LDAPProvider dans votre dossier extensions/.
    Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LDAPProvider
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php  :
    wfLoadExtension( 'LDAPProvider' );
    
  • Exécutez php maintenance/update.php pour créer les tables nécessaires de la base de données.
  • Configurez si nécessaire.
  • Yes Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Configuration

« Extension config » avec « Domain config »

Cette extension dispose de deux types de configuration. D'un côté, il y a la classique configuration d'extension. Elle peut être configurée en utilisant des variables globales dans LocalSettings.php. Notez bien que ces variables n'ont pas de préfixe wg. Ces paramètres affectent l'extension dans son ensemble.

D'un autre côté il existe une configuration propre à la ressource LDAP distante, comme les paramètres de connexion, le mécanisme des requêtes du groupe d'appartenance de l'utilidateur ou des DNs[4] de base. Plusieurs domaines peuvent être configurés de manière indépendante. Ces paramètres n'affectent que la communication vers la ressource LDAP, en fonction du domaine que cette ressource dessert.

Paramètres de configuration des extensions

Lorsque vous les utilisez dans LocalSettings.php, ces variables doivent être préfixées avec $LDAPProvider
Nom Valeur par défaut Description
CacheType "CACHE_ANYTHING" type de cache à utiliser pour les informations de connexion.
CacheTime 500 temps pendant lequel les objets doivent rester en cache (secondes).
ClientRegistry [] Permet l'enregistrement des clients consommateurs. La clé est le domaine à utiliser, la valeur est une fonction de callback qui renvoie un objet qui hérite de Client.
DomainConfigs "/etc/mediawiki/ldapprovider.json" Enregistre la configuration par domaine. Evalué uniquement si $LDAPProviderDomainConfigProvider est configuré pour utiliser la valeur par défaut LocalJSONFile. Voir ci-dessous.
DomainConfigProvider "\\MediaWiki\\Extension\\LDAPProvider\\DomainConfigProvider\\LocalJSONFile::newInstance" Détermine le mécanisme pour obtenir la configuration du domaine. Doit être une fonction de callback qui rend un IDomainConfigProvider.
DefaultDomain "" Indique le domaine de repli au cas où aucun domaine n'aurait été trouvé pour un utilisateur. C'est souvent le cas lorsque vous utilisez l'Extension Auth_remoteuser pour l'authentification basée sur le réseau.
PreSearchUsernameModifierRegistry
[
 "removespaces": "\\MediaWiki\\Extension\\LDAPProvider\\PreSearchUsernameModifier\\RemoveSpaces::newInstance",
 "spacetounderscore": "\\MediaWiki\\Extension\\LDAPProvider\\PreSearchUsernameModifier\\SpacesToUnderscores::newInstance",
 "spacestounderscores": "\\MediaWiki\\Extension\\LDAPProvider\\PreSearchUsernameModifier\\SpacesToUnderscores::newInstance",
 "strtolower": "\\MediaWiki\\Extension\\LDAPProvider\\PreSearchUsernameModifier\\ToLower::newInstance",
 "lowercase": "\\MediaWiki\\Extension\\LDAPProvider\\PreSearchUsernameModifier\\ToLower::newInstance"
]
Spécifie les fonctions de callback d'origine pour les objets de type MediaWiki\Extension\LDAPProvider\IPreSearchUsernameModifier. Les clés peuvent être utilisées dans la configuration du domaine dans le champ connection.presearchusernamemodifiers. Exemple pour un modificateur personnalisé :
$LDAPProviderPreSearchUsernameModifierRegistry
['custom-prefix-modifier'] = function() {
  return new MediaWiki\Extension\LDAPProvider
  \PreSearchUsernameModifier\GenericCallback(
    function( $username ) {
      return "some_prefix_$username";
  } );
};

Paramètres de configuration du domaine

Nom Valeur par défaut Description
server - Un ou plusieurs noms d'hôte du serveur LDAP. Séparé par un seul espace.
port 389 port sur lequel le serveur LDAP écoute
user "" Le FQDN d'un utilisateur qui possède au moins les droits de lecture
pass "" Mot de passe de l'utilisateur ci-dessus
options {} (objet JSON ou tableau PHP indexé) Options spécifiques LDAP. Doit avoir pour clé une chaîne de caractères littérale.
enctype clear Une valeur parmi 'ldapi', 'ssl', 'tls', ou 'clear'
groupbasedn "" Utilisé pour les requêtes d'appartenance aux groupes
userbasedn "" Utilisé pour les requêtes d'informations sur les utilisateurs. Également pour résoudre un nom d'utilisateur local dans un DN approprié d'utilisateurs
searchattribute "" Attribut à utiliser dans les recherches pour le DN de l'utilisateur. uid et samaccountname sont communs. Un searchstring sautera cette recherche si les DNs de votre utilisateur possèdent le même motif.
searchstring "" Fournit un motif pour le nom de DN de l'utilisateur, au lieu de le rechercher par searchattribute et nom d'utilisateur.

La valeur doit être un DN d'exemple avec USER-NAME à la place du vrai nom d'utilisateur.

c'est à dire

"CN=USER-NAME,OU=Users,DC=example,DC=com"

grouprequest "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\GroupUniqueMember::factory" Mécanisme de récupération des données des groupes d'utilisateurs. Les types suivants sont disponibles :
  • "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\GroupMember::factory"
  • "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\GroupUniqueMember::factory"
  • "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\UserMemberOf::factory"
  • "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\Configurable::factory"
  • "MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\GroupMemberUid::factory"

Le choix dépend du serveur LDAP.


GroupMember recherche les objets group par (member=$userDN), y compris les groupes imbriqués, si défini (voir nestedgroups ci-dessous).

GroupUniqueMember recherche les objets groupofUniqueName avec (uniqueMember=$userDN).

UserMemberOf recherche les attributs memberOf de l'objet LDAP propre à l'utilisateur.

Configurable effectue une recherche personnalisée, (&(objectclass=$objectClass)($groupAttribute=$userDN)). Voir groupobjectclass et groupattribute ci-dessous.

GroupMemberUid recherche les objets posixGroup par (member=$userUid), ou dans les groupes imbriqués s'il est défini (voir nestedgroups ci-dessous).

groupobjectclass "" Dans le cas où Configurable est utilisé dans grouprequest, groupobjectclass peut être spécifié ici. c'est à dire group
groupattribute "member" Dans le cas où Configurable est utilisé dans grouprequest, groupattribute peut être spécifié ici. c'est à dire member
presearchusernamemodifiers [] Umodificateurs du sername, pour les requêtes LDAP.
Utile lorsque les noms d'utilisateur LDAP ne correspondent pas au format des noms d'utilisateur MediaWiki.
(par exemple, les comptes LDAP utilisent des caractères de soulignement '_' au lieu d'espaces, ou doivent être mis en minuscules)
Le nom d'utilisateur modifié sera utilisé avec les méthodes searchstring ou searchattribute pour déterminer le DN de l'utilisateur.


Utiliser un ou plusieurs modificateurs disponibles :

  • lowercase
  • removespaces
  • spacestounderscores


Exemple d'utilisation :
[ "lowercase" ]
[ "removespaces" ]
[ "spacestounderscores", "lowercase" ]

Exemple de travail :' l'utilisateur de la connexion Joe Bloggs sera traduit en ' requête de recherche LDAP joe_bloggs,
avec la configuration de : [ "spacestounderscores", "lowercase" ]

Des modificateurs supplémentaires peuvent être enregistrés avec la variable $LDAPProviderPreSearchUsernameModifierRegistry (voir ci-dessus).

nestedgroups false Indique que vous voulez utiliser LDAP_MATCHING_RULE_IN_CHAIN pour récupérer les groupes imbriqués. Ne fonctionne qu'avec Microsoft Active Directory et avec grouprequest = MediaWiki\\Extension\\LDAPProvider\\UserGroupsRequest\\GroupMember::factory


Plus précisément, il s'agit d'une recherche d'objets de groupe où (member:1.2.840.113556.1.4.1941:=$userDN).

Fournisseurs de configuration de domaines

Par défaut, la configuration spécifique du domaine est stockée dans un fichier JSON statique. Mais on peut aussi utiliser une configuration (dynamique) basée sur PHP. La configuration de l'extension correspondante est $LDAPProviderDomainConfigProvider. Ce doit être une fonction de callback qui renvoie un objet de type IDomainConfigProvider.

Fichier JSON statique

C'est la manière par défaut. Il suffit de configurer le paramètre de configuration de l'extension $LDAPProviderDomainConfigs en indiquant un fichier JSON valide (doit être en dehors de la racine web).

$LDAPProviderDomainConfigs = "$IP/../ldapprovider.json";

Exemple

{
	"LDAP": {
		"connection": {
			"server": "ldap.forumsys.com",
			"user": "cn=read-only-admin,dc=example,dc=com",
			"pass": "password",
			"options": {
				"LDAP_OPT_DEREF": 1
			},
			"basedn": "dc=example,dc=com",
			"groupbasedn": "dc=example,dc=com",
			"userbasedn": "dc=example,dc=com",
			"searchattribute": "uid",
			"searchstring": "uid=USER-NAME,dc=example,dc=com",
			"usernameattribute": "uid",
			"realnameattribute": "cn",
			"emailattribute": "mail"
		}
	}
}

Tableau PHP dynamique

Comme alternative au fichier JSON, vous pouvez utiliser un tableau PHP pour configurer les domaines. Dans ce cas, il suffit que la fonction de callback rende une instance de InlinePHPArray.

Exemple

$LDAPProviderDomainConfigProvider = function() {
	$config = [
		'LDAP' => [
			'connection' => [
				"server" => "ldap.forumsys.com",
				"user" => "cn=read-only-admin,dc=example,dc=com",
				"pass" => 'password',
				"options" => [
					"LDAP_OPT_DEREF" => 1
				],
				"basedn" => "dc=example,dc=com",
				"groupbasedn" => "dc=example,dc=com",
				"userbasedn" => "dc=example,dc=com",
				"searchattribute" => "uid",
				"searchstring" => "uid=USER-NAME,dc=example,dc=com",
				"usernameattribute" => "uid",
				"realnameattribute" => "cn",
				"emailattribute" => "mail"
			]
		]
	];

	return new \MediaWiki\Extension\LDAPProvider\DomainConfigProvider\InlinePHPArray( $config );
};

Advanced configuration

Dynamic usergroup attribute

Example

ldapprovider.json:

 {
 	"LDAP": {
 		"connection": {
 			"server": "...",
 			...
 			"grouprequest": "...Configurable::factory",
 			"groupobjectclass": "groupOfUniqueNames",
 			"groupattribute": "uniqueMember",
 			"group-attribute-value-callback": "myCoolCallback"
 		},
 },

Here "group-attribute-value-callback" specifies the name of some callback function which contains logic for the calculation of "groupattribute" value.

LocalSettings.php:

function myCoolCallback( $username ) {
 	return new \MediaWiki\Extension\LDAPProvider\EscapedString( $username );
 }

That's an example of a simple callback which returns the unchanged username as "groupattribute" value.

Versions

Les extensions de la pile LDAP sont ciblées ou qualifiées uniquement pour les versions LTS de MediaWiki.
Toutefois, ce tableau permet de déterminer quelles versions d'extension à utiliser pour toutes les versions récentes.

Version MediaWiki Version recommandée de l'extension Etat du test Date du dernier test
1.35 (LTS) LDAPxxx_master Testé mars 2020

Guide de dépannage

Exception: « Pas de configuration disponible pour le domaine 'XYZ'! »

Assurez-vous que les valeurs du champ ldap_domains.domain_id de la base de données correspondent aux valeurs établies au premier niveau de la configuration de domaine (par exemple, dans ldapprovider.json, vous devrez remplacer LDAP du niveau supérieur par votre domaine. Vous pouvez vérifier cela en recherchant l'entrée $_SERVER['USERDOMAIN'] dans le phpinfo() de votre serveur). Si ce n'est pas le cas, vous pouvez soit modifier les entrées de la base de données à l'aide de UPDATE ldap_domains SET domain = "DomainNameAsInConfiguration";, soit adapter la configuration. Attention: dans la version actuelle, le nom de domaine est sensible à la casse.

Exception: « Pas de section 'authorization' trouvée dans la configuration pour le domaine 'LDAP' »

Si vous avez activé l'extension LDAPAuthorization (comme recommandé dans la documentation PluggableAuth), vous devez ajouter le paramètre d'autorisation dans la configuration de domaine de LDAPProvider (plus d'informations à Configurer LDAPAuthorization)

Avertissement : Les informations fournies ne sont pas associées à un utilisateur de ce wiki.

Vérifiez que userbasedn et searchattribute sont corrects.

Exemples de bout en bout

Références

  1. anciennement l'Extension LDAP_Authentication
  2. Flux de la pile LDAP
  3. Lightweight Directory Access Protocol (LDAP) (fr)
  4. Distinguished Name (DN)