WordPress SSO et connexion Patreon

Salut à nouveau ! J’ai une question. Un de mes clients souhaite migrer progressivement son adhésion de Patreon vers WordPress (via Woocommerce Memberships). Je sais que c’est possible d’après d’autres discussions sur le forum.

Cependant, ma question est : si nous activons l’authentification unique (SSO) avec WordPress comme fournisseur, WordPress est-il le SEUL moyen de se connecter aux forums ? Est-ce que l’activation du SSO avec WordPress empêcherait les utilisateurs Patreon de se connecter via leurs comptes Patreon ? Ou est-il possible de faire fonctionner les deux simultanément ?

Désolé si c’est confus ou si ce n’est pas le bon endroit pour poser cette question.

Merci d’avance !

Oui, le premier S de SSO signifie « Single ». WordPress devient l’autorité pour toute l’authentification.

Cela dit, si Patreon fournit les adresses e-mail des utilisateurs, ceux-ci peuvent s’inscrire sur WordPress pour accéder à nouveau à leurs comptes, à condition d’utiliser la même adresse.

Vous pouvez également permettre aux utilisateurs de se connecter à votre site WordPress via Patreon avec Patreon WordPress – WordPress plugin | WordPress.org. Je n’ai pas testé cette solution, mais il devrait être possible de permettre aux utilisateurs de se connecter à WordPress via Patreon tout en conservant une connexion SSO entre WordPress et Discourse. Si vous essayez cela et rencontrez des problèmes pour que cela fonctionne, veuillez nous en informer.

Bonjour ! J’ai testé cette configuration et cela fonctionne globalement ! :slight_smile:
Le seul problème que j’ai constaté est qu’il ne redirige pas vers Discourse après une connexion réussie ; il renvoie l’utilisateur vers WordPress. L’utilisateur doit aller manuellement sur Discourse, puis cliquer à nouveau sur le bouton « Se connecter » pour s’inscrire. Je me demande si cela peut être corrigé d’une manière ou d’une autre ?

J’ai enregistré une vidéo pour montrer comment cela fonctionne :

Merci d’avoir essayé. Il semble que les paramètres SSO nécessaires pour connecter l’utilisateur à Discourse soient supprimés lors du processus de connexion Patreon. Si c’est le cas, il n’y a probablement rien qui puisse être fait pour résoudre ce problème.

Je me demande si cela peut être corrigé en modifiant le plugin WordPress-Patreon ? Est-ce que cela vaut la peine de contacter ses auteurs ? :slight_smile:

Si la cause du problème est bien celle que je soupçonne, modifier le plugin WordPress Patreon pourrait résoudre le problème. Ce qui me semble être à l’origine du souci, c’est que le plugin WordPress Patreon supprime les paramètres de requête sso et sig envoyés avec la demande de connexion Patreon. Il pourrait être utile de contacter les développeurs de ce plugin à ce sujet.

Avant de le faire, vous devriez vérifier que cliquer sur le bouton Se connecter sur Discourse, pour un utilisateur qui n’est pas actuellement connecté à WordPress, redirige vers la page de connexion WordPress. Si l’utilisateur choisit ensuite l’option de connexion via Patreon, il sera connecté à WordPress mais pas à Discourse. Notez que si votre site Discourse est configuré comme privé, le comportement ci-dessus se produira même si un utilisateur accède directement à votre site Discourse. Dans ce cas, l’utilisateur ne verra pas de bouton Se connecter sur Discourse.

Bonjour ! J’ai soumis un rapport aux développeurs du plugin Patreon : Redirecting not working when using together with Discourse SSO - Wordpress Plugin - Patreon Developers

Oui, je peux confirmer cela :

  • cliquer sur le bouton Connexion sur Discourse, pour un utilisateur qui n’est pas actuellement connecté à WordPress redirige l’utilisateur vers la page de connexion de WordPress - :white_check_mark: OUI

  • Si l’utilisateur sélectionne ensuite l’option de connexion Patreon, il est connecté à WordPress - :white_check_mark: OUI

  • mais pas connecté à Discourse - :white_check_mark: OUI - sur la vidéo ci-dessus à 0:32, on voit que l’utilisateur n’est pas connecté.

D’accord, j’ai trouvé une solution de contournement qui « résout » le problème de connexion à Patreon. Veuillez trouver les instructions ci-dessous. :slight_smile:

Vous aurez besoin de :

  • N’importe quel plugin fournissant un shortcode pour afficher un formulaire de connexion (j’ai WooCommerce installé sur mon site, j’ai donc utilisé le shortcode [woocommerce_my_account], qui fait exactement cela pour les utilisateurs non connectés).
  • Le plugin Members, qui fournit les shortcodes [members_logged_in] et [members_not_logged_in] pour masquer/afficher du contenu en fonction de la connexion de l’utilisateur. Vous pouvez utiliser tout autre plugin offrant une fonctionnalité de shortcode similaire.
  • Le plugin Shortcode Redirect.

L’idée est de créer une page spéciale qui affiche un formulaire de connexion (et un bouton de connexion Patreon) pour les utilisateurs non connectés. Si l’utilisateur est connecté, il doit être redirigé vers l’URL https://community.morevnaproject.org/session/sso?return_path=%2F.
(Bien sûr, vous devrez remplacer « community.morevnaproject.org » par votre propre domaine).

Ma page de connexion spéciale contient le code suivant :

[members_not_logged_in]
   [woocommerce_my_account]
   [patreon_login_button]
[/members_not_logged_in]
[members_logged_in]
   [redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']
[/members_logged_in]

(vous pouvez le voir en action ici - Log In / Register — Morevna Project)

Ensuite, tout ce que vous avez à faire est de configurer le plugin WP-Discourse pour utiliser cette page pour le SSO :

Lorsque l’utilisateur clique sur le bouton « Se connecter » dans Discourse, il est redirigé vers ma page WordPress spéciale. Comme l’utilisateur n’est pas connecté, le formulaire de connexion s’affiche. Si l’utilisateur clique sur le bouton « Se connecter avec Patreon », il est redirigé vers Patreon pour l’autorisation. Après une autorisation réussie, il est renvoyé vers ma page spéciale. Comme l’utilisateur est maintenant connecté, le shortcode « redirect » est activé :

[redirect url='https://community.morevnaproject.org/session/sso?return_path=%2F' sec='0']

…et l’utilisateur est redirigé avec succès vers les forums Discourse.

La partie session/sso?return_path=%2F à la fin de l’URL est requise, sinon Discourse ne reconnaîtra pas l’utilisateur comme connecté après la redirection.

C’est tout ! J’espère que cela aidera d’autres utilisateurs qui souhaitent avoir un SSO WordPress avec connexion Patreon sur leur site web. :slight_smile:

Bon travail pour avoir trouvé cela :+1:

Je ne veux pas minimiser le travail que vous avez accompli, mais ma première impression est que vous devriez envisager d’utiliser un service d’authentification externe (tel que okta.com ou auth0.com) à ce stade. Chaque fois que vous arrivez au point de connecter trois services différents (par exemple Patreon, WordPress et Discourse) pour obtenir une authentification unique en une seule étape, c’est le signe que vous devriez envisager une solution d’authentification dédiée. Que vous puissiez ou non y parvenir d’une manière ou d’une autre, il existe un risque non négligeable à long terme que votre solution tombe en panne ou ne fonctionne pas dans tous les cas.

Si vous souhaitez tout de même emprunter cette voie, j’ai quelques suggestions, mais sachez que cela va devenir un peu technique. Je les ajoute ici en partie au cas où d’autres personnes tomberaient dessus et voudraient aller plus loin.

J’ai jeté un coup d’œil rapide au code du plugin Patreon pour WordPress et il semble que leur flux OAuth accepte une clé/valeur final_redirect_uri dans le paramètre state, ce qui vous permettrait de passer directement de l’authentification Patreon à l’authentification SSO de Discourse, éliminant ainsi le besoin des plugins Members et Redirect mentionnés ci-dessus, et évitant tout problème qui pourrait survenir avec cette approche.

De nombreux services d’authentification disposent d’une version du paramètre final_redirect_uri, c’est-à-dire un paramètre qui vous permet de modifier l’endroit où l’utilisateur est redirigé après l’authentification. Si vous lisez ceci parce que vous essayez de résoudre le même problème, mais avec un service différent (autre que Patreon), et que vous avez également décidé que mon avertissement contre la connexion de trois services différents ne s’applique pas, c’est là que vous devriez chercher.

Cela signifie que vous voudriez que le shortcode qui génère le bouton de connexion Patreon accepte un final_redirect_uri en tant qu’argument, qui serait ensuite transmis à l’URL de connexion finale utilisée par Patreon. En examinant le code du plugin Patreon pour WordPress, c’est une proposition réalisable. Pour vous donner une idée, la fonction pertinente qui génère l’URL Patreon ressemble à ceci :

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

Fondamentalement, le code est déjà partiellement configuré pour gérer un final_redirect_uri personnalisé. Je comprends pourquoi les développeurs du plugin Patreon pour WordPress pourraient ne pas vouloir l’ajouter, mais si vous vous sentez assez à l’aise pour décrire ce que j’ai expliqué ici, cela pourrait valoir la peine de créer un problème sur leur dépôt GitHub. À défaut, vous pouvez utiliser la fonction que j’ai référencée ci-dessus pour générer un lien vous-même et créer votre propre bouton (ou engager un développeur WordPress pour le faire).

Juste une petite remarque sur la construction de l’URL SSO, il est plus clair d’utiliser

https://discourse.example.com/session/sso?return_path=/

au lieu de

https://discourse.example.com/session/sso?return_path=%2F

Ce dernier élément, le return_path, est le chemin vers lequel l’utilisateur est redirigé dans Discourse après la connexion. S’il s’agit de /, ils seront envoyés à la page d’accueil du forum. Pour en savoir plus sur la construction des URL SSO, consultez WP Discourse Tips and Tricks.

+1 oui, il y a un risque ! :slight_smile:

Ouah, merci beaucoup pour les instructions détaillées ! Donc, il est logique de modifier le shortcode [patreon_login_button] pour accepter le paramètre final_redirect_uri et de faire une PR sur leur dépôt GitHub. Merci encore d’avoir pris le temps de m’expliquer !