Plugin WordPress
Présentation
L'objet de cette page est de décrire le plugin WordPress OpenFlyers SSO, qui permet aux membres d'une structure de se connecter à un espace privé d'un site WordPress avec leurs identifiants OpenFlyers. Le mot de passe est saisi sur la plateforme OpenFlyers. Il n'est ni transmis au site WordPress ni stocké par celui-ci.
- Description du plugin
Le plugin met en oeuvre le mécanisme d'autorisation Authorization Code avec PKCE, l'authentification TLS mutuelle et la signature HTTP décrits dans la page API OpenFlyers.
L'archive du plugin contient un fichier README.md qui décrit l'installation et l'exploitation côté WordPress. La présente page décrit les opérations réalisées sur la plateforme OpenFlyers ainsi que le paramétrage du plugin.
Prérequis
- Sur l'hébergement du site WordPress
- PHP version 7.4 ou supérieure, avec les extensions curl et openssl
- la possibilité d'utiliser un certificat client sortant. Certains hébergements mutualisés l'interdisent
- un emplacement de stockage hors de la racine web pour les clés privées
- un accès au site en HTTPS avec une URL stable
- Sur la plateforme OpenFlyers
- un compte disposant des droits d'administration
- un profil portant l'autorisation de connexion depuis l'extérieur pour chaque membre concerné
Obtenir le plugin
L'archive du plugin est mise à disposition par OpenFlyers à cette adresse : https://openflyers.com/wordpress-sso/openflyers-sso-1.1.0.zip
Autoriser les membres à se connecter
Admin > Utilisateurs > Profils
Dans l'onglet Généralités, cocher la case de la colonne Connexion depuis l'extérieur (OAuth2) pour chaque profil dont les membres accèdent à l'espace privé du site WordPress, puis cliquer sur le bouton VALIDER.
Un membre dont aucun profil ne porte cette autorisation obtient le message Connected user is not allowed to login après la saisie de ses identifiants.
Cette autorisation détermine quels membres accèdent à l'espace privé : seuls les profils cochés y accèdent.
Déclarer le client OAuth2
La déclaration du client s'effectue depuis l'administration de la plateforme, selon la procédure décrite au chapitre Enregistrer un client.
Deux valeurs sont propres au plugin :
- Type d'autorisation : sélectionner Authorization Code. Sélectionner également Refresh Token pour des sessions de longue durée
- URL de redirection : l'URL affichée en haut de la page de réglages du plugin, de la forme
https://exemple.fr/?of_sso=callback. Cette URL est reproduite au caractère près
La déclaration délivre deux certificats signés, un identifiant de client et une passphrase. La passphrase n'est affichée qu'une seule fois.
Installer le plugin
Extensions > Ajouter > Téléverser une extension
Sélectionner l'archive du plugin, cliquer sur le bouton Installer maintenant, puis sur le bouton Activer.
Configurer le plugin
Réglages > OpenFlyers SSO
Renseigner les champs suivants :
- Code plateforme : le code de la plateforme OpenFlyers. Laisser ce champ vide lorsque la plateforme répond à la racine du domaine
- client_id et Passphrase (client_secret) : les valeurs délivrées lors de la déclaration du client
- Dossier des certificats : le chemin absolu du dossier contenant les six fichiers fournis par OpenFlyers
Cliquer sur le bouton Enregistrer les modifications.
Les noms de fichiers attendus dans ce dossier sont indiqués sous le champ. Un fichier portant un autre nom se déclare individuellement dans la rubrique Chemins personnalisés (avancé).
Vérifier la configuration
Cliquer sur le bouton Tester la connexion à OpenFlyers situé en haut de la page de réglages. Le plugin envoie une requête au serveur d'autorisation avec un code d'autorisation invalide. Le certificat TLS, la signature HTTP et les identifiants du client sont ainsi contrôlés par le serveur.
Le message Connexion à OpenFlyers réussie indique que la chaîne d'authentification est acceptée et qu'un membre peut se connecter. Les autres messages désignent l'élément refusé : certificat, signature, identifiants du client ou type d'autorisation du client.
La rubrique Diagnostic, en bas de la page, contrôle sans connexion au serveur la présence des extensions PHP, la lisibilité des fichiers, les dates d'expiration des certificats et la correspondance entre chaque certificat et sa clé privée.
Gérer les comptes WordPress
OpenFlyers transmet au site l'identifiant du membre. Son nom et son adresse électronique peuvent également être récupérés : voir Afficher le nom et l'e-mail des membres.
Deux modes de gestion sont disponibles :
- Comptes existants uniquement : le membre dispose d'un compte WordPress portant son identifiant OpenFlyers. Cet identifiant se saisit dans la fiche de l'utilisateur WordPress, rubrique OpenFlyers
- Créer automatiquement les comptes : un compte WordPress est créé à la première connexion, avec le rôle sélectionné. Ce compte porte un identifiant technique de la forme of-1234
Pour retirer l'accès d'un membre, vider le champ Identifiant du membre dans sa fiche WordPress. La désactivation de son compte OpenFlyers produit le même effet.
Afficher le nom et l'e-mail des membres
Par défaut, un compte créé automatiquement porte un nom technique de la forme of-1234. Pour afficher à la place le prénom et le nom du membre, par exemple sur ses commentaires, et renseigner son adresse électronique, le plugin peut les lire dans un rapport de la plateforme à chaque connexion. Aucun code n'est à écrire.
Cette fonction demande la version 1.2.0 du plugin ou une version ultérieure.
Créer la variable du rapport
Cette étape se fait une seule fois.
- Gestion > Rapports > Rapports personnalisés > Champs métiers
- En bas du tableau :
- Dans le champ Nom de variable, saisir
memberId, exactement sous cette forme - Dans le champ Intitulé, saisir Identifiant du membre
- Dans le champ Type de valeur, choisir Nombre entier
- Dans le champ Nom de variable, saisir
- Cliquer sur le bouton Ajouter
Voir Ajouter un champ dans le formulaire des rapports.
Créer le rapport des coordonnées
- Gestion > Rapports > Rapports personnalisés > Créer/Modifier
- Tout en bas du tableau, cliquer sur le bouton Ajouter
- Dans le champ Intitulé, saisir Coordonnées des membres (site WordPress)
- Dans le champ Requête SQL, saisir :
SELECT person.first_name, person.last_name, person.email FROM person WHERE person.id = $memberId
- Dans Visible pour les profils, cocher les profils autorisés à se connecter depuis l'extérieur
- Cliquer sur le bouton Valider
- Noter le numéro du rapport, affiché dans la liste des rapports
Les colonnes doivent s'appeler first_name, last_name et email. Une colonne absente est ignorée : une requête sans person.email ne transmet que le nom.
Les profils ayant le droit Voir tous les rapports ont accès au rapport même s'ils ne sont pas cochés.
Attention : comme tout rapport personnalisé, ce rapport peut aussi être affiché dans OpenFlyers par les profils cochés, pour n'importe quel membre. Vérifier que ces profils peuvent voir le nom et l'adresse électronique des autres membres, ou retirer person.email de la requête.
Renseigner le rapport dans le plugin
- Dans WordPress, Réglages > OpenFlyers SSO
- Dans le champ Rapport des coordonnées des membres, saisir le numéro du rapport
- Cliquer sur Enregistrer les modifications
À chaque connexion, le prénom, le nom, le nom affiché et l'adresse électronique du compte WordPress sont mis à jour depuis OpenFlyers :
- un nouveau membre les reçoit dès sa première connexion
- un compte déjà créé, par exemple of-1234, est mis à jour à sa connexion suivante
- l'identifiant de connexion WordPress reste of-1234 : WordPress ne permet pas de le modifier, mais c'est le nom affiché qui apparaît sur le site
- une adresse électronique déjà utilisée par un autre compte WordPress n'est pas recopiée
- si le rapport ne peut pas être lu, la connexion se fait quand même, sans ces informations
OpenFlyers est la source de ces informations : une modification faite dans WordPress est remplacée à la connexion suivante.
Réserver du contenu aux membres
Le plugin fournit deux codes courts.
Bouton de connexion :
[openflyers_login]
Contenu réservé aux membres connectés :
[openflyers_membre]Contenu réservé[/openflyers_membre]
Troubleshooting
Connected user is not allowed to login
Le membre n'appartient à aucun profil dont la case Connexion depuis l'extérieur (OAuth2) est cochée.
400 The SSL certificate error
Le serveur web refuse le certificat client avant traitement de la requête. Le certificat installé sur le site ne correspond pas à celui enregistré lors de la déclaration du client. Lorsque les fichiers sont conformes, l'hébergement termine la connexion TLS sur un serveur intermédiaire : cocher la case Envoyer l'en-tête X-SSL-CERT.
unable to get local issuer certificate
Le fichier ca.crt installé ne permet pas de valider le certificat du serveur OpenFlyers. Ce fichier valide le serveur et non le client. Retirer ca.crt du dossier des certificats pour utiliser le magasin d'autorités du système.
Aucun compte de ce site n'est associé à votre compte OpenFlyers
Le mode Comptes existants uniquement est actif et aucun compte WordPress ne porte l'identifiant du membre. Renseigner cet identifiant dans la fiche de l'utilisateur WordPress, ou activer la création automatique des comptes.
Session de connexion expirée ou invalide
Plus de dix minutes se sont écoulées entre le début de la connexion et le retour sur le site. Recommencer la connexion.
Le nom des membres ne s'affiche pas
Le membre est connecté mais garde un nom de la forme of-1234. Activer la journalisation dans les réglages du plugin, puis consulter le journal PHP du site :
- Report access denied : aucun profil du membre n'est coché dans Visible pour les profils du rapport des coordonnées
- Requested report was not found : le numéro saisi dans le plugin ne correspond à aucun rapport personnalisé