Accueil > OpenID Connect OAuth Server par DnC > Développer > Extension pour Wordpress "OpenID Connect Generic Client"

Extension pour Wordpress "OpenID Connect Generic Client"

Il existe différentes extensions de client OpenID Connect pour WordPress. Nous présentons ici OpenID Connect Generic Client de daggerhart qui nous parait complète, bien construite et bien documentée.

En cours de développement : un fork incluant le monitoring et le management de la session.


Installation

 L’extension peut être trouvée sur GitHub :
- https://github.com/daggerhart/openid-connect-generic,
- https://github.com/bdegoy/openid-connect-generic (notre fork).
Le plugin s’installe comme toute extension, de façon classique ou avec Composer. Voyez la documentation.

Notes :
- La source Github est mieux tenue à jour que celle du site WP (version testée jusqu’à 5.1.1 en mai 2019).

Inscription de l’application sur le serveur OAuthSD

Il s’agit des étapes 1 et 2 de la procédure décrite ici : OpenID Connect : Lier une application cliente au serveur OAuthSD.

S’inscrire en tant qu’auteur

En suivant cette procédure vous commencerez par vous inscrire en tant qu’auteur sur le serveur OAuthSD.

Inscrire l’application
Vous devez désigner votre application WordPress comme client du serveur OpenID Connect. Pour cela, accédez à l’URL : https://oa.dnc.global/web/?page=cre... :

- Client Id : Entrez un nom court, sans espace ni caractère spécial autre que ’_’. Ce n’est lié à aucune désignation de votre application.

- Client secret (obligatoire) : une courte chaîne assimilable à un mot de passe fort. Ce code doit rester secret.

- Redirect uri (obligatoire) : URI de retour à l’application cliente. Si l’URL de votre application WP est "http://votre_application.ext", inscrivez "http://votre_application.ext/wp-admin/admin-ajax.php?action=openid-connect-authorize.

- Grant Type (obligatoire) : sélectionnez "Authorization Code".

- Scopes (obligatoire) : Inscrivez "openid profile email".

Configuration de WP

Il s’agit de l’étape 3 de la procédure.

Accédez au menu Réglages -> OpenID Connect Client.

Votre application Wordpress doit être configurée comme ci-après, où Client ID et Client Secret Key sont les valeurs inscrites précédemment sur le serveur :

Inscription d’un utilisateur sur OAuthSD

Le principe de l’inscription unique (Single Sign On, SSO) permet à un utilisateur de se connecter à différentes applications avec les mêmes identifiants (login, mot de passe ...).
Il faut donc d’abord inscrire un utilisateur sur OAuthSD (ou utiliser un utilisateur OAuthSD existant). Faire l’inverse (créer l’utilisateur sur votre application WP et l’inscrire sur le serveur OpenID Connect) irait à l’encontre du principe.

L’inscription d’un utilisateur se fait ici : https://oa.dnc.global/web/spip.php?...

Création de l’utilisateur par WP

Si l’utilisateur n’existe pas du côté WP, l’extension le créera.

Notes :
- Si on tente de se loger avec un identifiant de l’utilisateur OIDC qui existe déjà pour un utilisateur WP, le plugin crée un utilisateur WP avec un identifiant incrémenté ; par exemple si le login est "admin", l’utilisateur WP d’identifiant "admin2" sera créé avec un rôle "abonné". Il appartiendra à l’administrateur du site WP de modifier éventuellement ce rôle.
- Dans le cas où l’e-mail de l’utilisateur OpenID existe déjà pour un utilisateur WP différent, c’est OpenID qui est maître : le plus logique sera de changer l’identifiant de cet utilisateur WP pour celui de l’utilisateur OpenID (puisque l’e-mail désigne une personne de façon non ambiguë).

Erreurs provenant de la configuration

- Missing state - La plupart du temps, cette erreur provient du fait que l’utilisateur a été trop long pour s’identifier, ou est retourné sur un formulaire ancien. Il suffit de recommencer.

- User claim incomplete - Se produit quand la liste des déclarations (claims) retournées par Userinfo, en fonction des portées définies pour l’application (scopes) ne contient pas celles qui sont définies dans le format.
Par exemple :

  • l’application a été configurée sans le scope email (champ de configuration OpenID Scope) et le format Email Formatting est email.
  • Display Name Formatting a été fixé à name alors que ce champ est null dans le serveur OpenID pour l’utillisateur considéré et que le nom de l’utilisateur figure dans la déclaration family_name.

- Failed user creation - Se produit le plus souvent quand WP tente de créer un nouvel utilisateur et que l’e-mail déclaré par l’utilisateur OIDC existe déjà du côté de WP.

- redirect_uri_mismatch : The redirect URI provided is missing or does not match - Cette erreur est générée par le serveur OAuthSD en réponse à la requête au contrôleur Authorize. Elle se produit lorsque l’URL de retour (Redirect URI) enregistrée sur le serveur OAuthSD n’est pas conforme à ce qui est indiqué en bas du formulaire Réglages -> OpenID Connect - Generic Client. En particulier, OAuthSD impose le protocole de transfert sécurisé (https).

- ERREUR : les cookies sont bloqués ou ne sont pas reconnus par votre navigateur. Vous devez activer les cookies pour utiliser WordPress. - Il est probable que vous ayez omis ’https://’ dans la barre d’adresse.

Erreur CORS (visible dans le debugger du navigateur
C’est une erreur très courante que de lancer l’application de test avec http:// au lieu de https://. Cela peut également conduirte à une erreur CORS :
"(index):1 Access to XMLHttpRequest at ’https://oa.dnc.global/authorize?response_type=code&client_id=wpdemo&user_id=wpadmin&state=124979a12478&scope=openid&prompt=none’ from origin ’http://wp.dnc.global’ has been blocked by CORS policy : The ’Access-Control-Allow-Origin’ header has a value ’https://wp.dnc.global’ that is not equal to the supplied origin."

Démonstration

https://wp.dnc.global/2019/05/11/ex... est un démonstrateur d’une application WP liée à OAuthSD avec cette extension.

Monitoring : développement en cours

Nous développons un fork qui inclut le monitoring.
 Le code est visible ici : https://github.com/bdegoy/openid-co.... Le fonctionnement est semblable à ce qui a été décrit pour Plugin OpenID Connect Client pour SPIP.