WordPress Multisite avec plusieurs instances Discourse

Bonjour à tous,

Je cherche des informations / une étude de faisabilité concernant l’ajout d’une autre communauté Discourse à notre configuration actuelle. Pour l’instant, nous avons une installation WordPress multisite avec une seule communauté Discourse utilisant Discourse SSO pour un site dédié à cette communauté, tandis qu’un autre fournisseur SSO gère la connexion WP.

Je souhaite ajouter un nouveau site WP pour une nouvelle communauté Discourse, mais je ne suis pas certain de savoir si plusieurs forums Discourse peuvent être regroupés dans cette configuration multisite (si cela a du sens). Étant donné que le SSO est configuré au niveau du réseau WP, il semble qu’il ne soit pas possible d’avoir plus d’une instance Discourse.

Idéalement, nous voudrions avoir :

  • WordPress multisite
  • 2 instances Discourse

(Les utilisateurs des deux instances Discourse n’auraient accès qu’à la communauté à laquelle ils appartiennent).

J’ai lu quelques publications concernant une configuration WP multisite avec une instance Discourse en mode site unique (et vice versa), mais aucune information sur une configuration WP multisite avec plusieurs instances Discourse.

Merci

Il n’est pas possible que des sites d’un réseau multisite WordPress fonctionnent comme fournisseur d’authentification unique (SSO) pour deux instances Discourse. La raison en est que, sur un réseau multisite, tous les utilisateurs sont stockés dans une seule table de base de données. Si plusieurs sites Discourse sont autorisés à fonctionner comme fournisseurs SSO pour plusieurs sites d’un réseau, il n’existe aucun moyen simple de garantir que les identifiants d’utilisateur Discourse enregistrés sur WordPress sont uniques.

Merci, c’est bien ce que je pensais. Serait-il possible de configurer une instance Discourse comme fournisseur SSO pour l’autre instance, tout en conservant un accès approprié des utilisateurs à leurs communautés respectives ?

Une instance Discourse peut fonctionner en tant que fournisseur SSO pour une autre instance Discourse. Je suppose que la configuration que vous envisagez consiste à utiliser WordPress comme fournisseur SSO pour l’instance Discourse 1, et que l’instance Discourse 1 serait le fournisseur SSO pour l’instance Discourse 2. Je pense que c’est possible, mais je n’ai jamais configuré un site Discourse pour être à la fois un client SSO et un fournisseur SSO.

Avec la configuration que j’ai décrite ci-dessus, tous les utilisateurs de l’instance Discourse 1 auraient accès à l’instance Discourse 2. Je ne pense pas que ce soit ce que vous souhaitez.

Une autre approche possible pour résoudre ce problème consisterait à utiliser une seule instance de Discourse et à utiliser les permissions de groupes par catégorie pour limiter les parties du forum auxquelles les utilisateurs peuvent accéder. Vous pouvez transmettre des groupes Discourse dans la charge utile SSO. Il devrait être possible sur votre site WordPress de déterminer quels sites un utilisateur a le droit d’accéder. Vous pourriez créer un groupe Discourse pour chaque site WordPress, puis utiliser le filtre wpdc_sso_params pour ajouter un paramètre add_groups à la charge utile SSO.

Actuellement, Discourse SSO est le fournisseur SSO — je suppose que la (nouvelle) considération serait d’avoir l’Instance 1 comme fournisseur SSO (pour les instances 1 et 2).

En résumé, conserver la même configuration SSO que nous avons actuellement, mais ajouter une autre instance Discourse et toujours trouver un moyen de limiter l’accès entre l’instance 1 et l’instance 2.

Bonjour @simon - je suis en train de mettre cela en œuvre et je ne comprends pas pourquoi je ne vois pas les options de client SSO dans le plugin WP Discourse. Veuillez consulter la capture d’écran ci-dessous.

Ma connexion indique qu’elle est active (la dernière utilisation de la clé API le confirme également). Lors de l’ajout du raccourci [discourse_sso_client], il semble y avoir un problème de configuration (l’en-tête de réponse de localisation contient l’URL générée par le raccourci [discourse_sso_client] au lieu de la charge utile SSO.

C’est prévu ainsi. L’option du client SSO n’est disponible sur les réseaux multisites que lorsqu’elle est configurée au niveau du site entier. Je dois configurer un réseau multisite dans mon environnement de développement local pour vérifier les paramètres. Je reviendrai vers vous à ce sujet plus tard aujourd’hui.

Merci - actuellement, j’ai installé le plugin au niveau du réseau avec le client SSO sélectionné

edit : J’ai isolé le problème jusqu’à query-redirect.php ici :

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) ) {
   return;
}

Il semble que cette option ne soit pas définie correctement pour moi - je ne sais pas si cela est dû à la configuration au niveau du réseau ou à autre chose.

La documentation pour configurer le plugin dans un réseau multisite n’est pas à jour. C’est une bonne occasion de l’organiser et de mettre à jour le guide Installation et configuration du plugin WP Discourse.

Pour utiliser la fonctionnalité de client SSO sur un réseau multisite, le plugin doit être configuré au niveau du réseau. Cela se fait en cliquant sur le lien Discourse dans votre Tableau de bord Réseau :

Sur la page Réseau de Discourse, sélectionnez l’option Activer la configuration multisite. Ensuite, saisissez votre URL Discourse, votre clé API et votre nom d’utilisateur de publication dans la section Paramètres de connexion. Faites défiler la page jusqu’en bas et cliquez sur le bouton Enregistrer les options. Vous devriez voir un message « Vous êtes connecté à Discourse ! » en haut de la page.

Pour utiliser Discourse comme fournisseur SSO pour les sites de votre réseau multisite, faites défiler la page Réseau de Discourse jusqu’en bas et sélectionnez l’option Activer le client SSO. Ajoutez également une clé dans le paramètre Clé secrète SSO. Enregistrez à nouveau vos options.

Allez maintenant sur votre site Discourse et copiez la clé secrète dans le paramètre du site sso provider secrets de Discourse. Saisissez le symbole * comme domaine du fournisseur SSO. Une fois ce paramètre enregistré, il devrait ressembler à ceci :

Sélectionnez ensuite l’option enable sso provider sur Discourse.

Avec ces paramètres en place, accéder à l’onglet SSO / Client SSO de WP Discourse pour n’importe quel site de votre réseau devrait vous amener à une page ressemblant à ceci :

Pour un test rapide, sélectionnez les options Ajouter un lien de connexion et Synchroniser les utilisateurs existants par e-mail. Ensuite, déconnectez-vous de votre site WordPress. Vous devriez pouvoir vous reconnecter en cliquant sur le lien « Se connecter avec Discourse » qui s’affichera sur votre page wp-login.php.

Si vous n’utilisez pas la page de connexion WordPress par défaut, essayez de copier le shortcode [discourse_sso_client] dans un article de votre site. Ce shortcode n’affiche le code HTML que pour les utilisateurs déconnectés. Vous pouvez également créer un lien de connexion en construisant un lien sous cette forme :

<a href="https://example.com/?discourse_sso=1&redirect_to=https://example.comt/">Se connecter avec Discourse</a>

Cela connectera l’utilisateur à votre site via Discourse, puis le redirigera vers la page WordPress définie comme valeur du paramètre redirect_to.

Selon vos analyses de débogage, il semble que l’option Activer le client SSO n’ait pas été activée sur votre page Réseau de Discourse. Pouvez-vous vous assurer que cette option est activée et me dire si vous rencontrez toujours des problèmes ?

Le code que vous avez trouvé et qui empêchait le client SSO de fonctionner est correct, mais il s’agit d’une condition mal écrite :

if ( empty( $this->options['sso-client-enabled'] ) || 1 !== intval( $this->options['sso-client-enabled'] ) )

Il devrait être simplifié en if ( empty( $this->options['sso-client-enabled'] ) ). C’est le modèle utilisé partout ailleurs dans le plugin.