Wordpress Multisite mit mehreren Discourse-Instanzen

Hallo zusammen,

ich suche nach Informationen zur Machbarkeit, eine weitere Discourse-Community in unsere aktuelle Einrichtung zu integrieren. Momentan nutzen wir ein WordPress-Multisite-Setup mit einer Discourse-Community, die Discourse-SSO für eine auf die Discourse-Community spezialisierte Website verwendet, wobei ein anderer SSO-Anbieter den WP-Login steuert.

Ich plane, eine neue WP-Site für eine neue Discourse-Community hinzuzufügen, bin mir aber unsicher, ob mehrere Discourse-Foren innerhalb dieses Multisite-Setups miteinander verbunden werden können (falls das Sinn ergibt). Da SSO ein WP-Netzwerk-Setup ist, scheint es nicht möglich zu sein, mehr als eine Discourse-Instanz zu haben.

Idealerweise hätten wir:

  • WP-Multisite
  • 2 Discourse-Instanzen

(Nutzer beider Discourse-Instanzen sollten nur Zugriff auf die Community haben, der sie angehören).

Ich habe einige Beiträge über ein Multisite-WP-Setup mit einer Single-Site-Discourse (und umgekehrt) gelesen, aber keine Informationen zu Multisite-WP und mehreren Discourse-Instanzen.

Vielen Dank

Es ist nicht möglich, dass Websites in einer WordPress-Multisite-Konfiguration als SSO-Anbieter für zwei Discourse-Instanzen fungieren. Der Grund dafür ist, dass in einem Multisite-Netzwerk alle Benutzer in einer einzigen Datenbanktabelle gespeichert sind. Wenn mehrere Discourse-Sites als SSO-Anbieter für mehrere Sites in einem Netzwerk fungieren dürfen, gibt es keine einfache Möglichkeit, sicherzustellen, dass die in WordPress gespeicherten Discourse-Benutzer-IDs eindeutig sind.

Danke – das habe ich mir auch gedacht. Wäre es möglich, eine Discourse-Instanz als SSO-Anbieter für die andere Instanz zu verwenden, während gleichzeitig der korrekte Benutzerzugriff auf ihre jeweiligen Communities gewährleistet bleibt?

Eine Discourse-Instanz kann als SSO-Anbieter für eine andere Discourse-Instanz fungieren. Ich gehe davon aus, dass Sie eine Konfiguration im Sinn haben, bei der WordPress als SSO-Anbieter für Discourse-Instanz 1 dient und Discourse-Instanz 1 wiederum als SSO-Anbieter für Discourse-Instanz 2 agiert. Das halte ich für möglich, habe jedoch noch nie eine Discourse-Seite so konfiguriert, dass sie sowohl SSO-Client als auch SSO-Anbieter ist.

Bei der oben beschriebenen Konfiguration hätten alle Benutzer von Discourse-Instanz 1 Zugriff auf Discourse-Instanz 2. Das ist meiner Meinung nach nicht das, was Sie beabsichtigen.

Ein weiterer möglicher Ansatz wäre die Nutzung einer einzigen Discourse-Instanz und die Beschränkung des Zugriffs auf bestimmte Forenbereiche mittels Kategoriegruppenberechtigungen. Sie können Discourse-Gruppen im SSO-Payload übergeben. Auf Ihrer WordPress-Seite sollte es möglich sein, festzustellen, auf welche Seiten ein Benutzer Zugriff hat. Sie könnten für jede WordPress-Seite eine Discourse-Gruppe erstellen und dann den Filter wpdc_sso_params verwenden, um einen add_groups-Parameter zum SSO-Payload hinzuzufügen.

Derzeit ist Discourse SSO der SSO-Anbieter – ich vermute, die (neue) Überlegung wäre, Instanz 1 als SSO-Anbieter (für beide Instanzen 1 und 2) einzurichten.

Im Wesentlichen das gleiche SSO-Setup wie jetzt beibehalten, aber eine weitere Discourse-Instanz hinzufügen und dennoch eine Möglichkeit haben, den Zugriff zwischen Instanz 1 und Instanz 2 einzuschränken.

Hallo @simon – ich implementiere dies derzeit und bin mir nicht sicher, warum ich im WP Discourse-Plugin keine SSO-Client-Optionen sehe. Siehe Screenshot unten:

Meine Verbindung wird als aktiv angezeigt (auch die letzte Verwendung des API-Schlüssels bestätigt dies). Beim Einfügen des Shortcodes [discourse_sso_client] scheint es ein Konfigurationsproblem zu geben (der Location-Antwort-Header enthält die vom Shortcode [discourse_sso_client] generierte URL anstelle des SSO-Payloads).

Das ist beabsichtigt. Die SSO-Client-Option ist nur in Multisite-Netzwerken verfügbar, wenn sie auf netzwerkweiter Ebene konfiguriert ist. Ich muss in meiner lokalen Entwicklungsumgebung ein Multisite-Netzwerk einrichten, um die Einstellungen noch einmal zu überprüfen. Ich melde mich später heute bei dir dazu.

Danke – aktuell habe ich das Plugin auf Netzwerkebene installiert und den SSO-Client ausgewählt.

Edit: Ich habe es auf query-redirect.php hier eingegrenzt:

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

Anscheinend wird diese Option für mich nicht korrekt gesetzt – ich bin mir nicht sicher, ob es an der Einrichtung auf Netzwerkebene liegt oder an etwas anderem.

Die Dokumentation zur Einrichtung des Plugins in einem Multisite-Netzwerk ist veraltet. Das ist eine gute Gelegenheit, sie zu ordnen und den Leitfaden zur Installation und Einrichtung des WP Discourse-Plugins zu aktualisieren.

Um die SSO-Client-Funktionalität in einem Multisite-Netzwerk zu nutzen, muss das Plugin auf Netzwerkebene konfiguriert werden. Dies erfolgt, indem Sie im Netzwerk-Dashboard auf den Discourse-Link klicken:

Auf der Discourse-Netzwerkseite wählen Sie die Option „Multisite-Konfiguration aktivieren