Extension:LDAPProvider
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.
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 | |
|
|
Téléchargements trimestriels | 417 (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 dossierextensions/
.
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.
- 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
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 :
Le choix dépend du serveur LDAP.
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.
|
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
|
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
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
- ↑ anciennement l'Extension LDAP_Authentication
- ↑ Flux de la pile LDAP
- ↑ Lightweight Directory Access Protocol (LDAP) (fr)
- ↑ Distinguished Name (DN)
Cette extension est incluse dans les fermes de wikis ou les hôtes suivants et / ou les paquets : Cette liste ne fait pas autorité. Certaines fermes de wikis ou hôtes et / ou paquets peuvent contenir cette extension même s'ils ne sont pas listés ici. Vérifiez toujours cela avec votre ferme de wikis ou votre hôte ou votre paquet avant de confirmer. |