WordPress Multisite con più istanze di Discourse

Ciao a tutti,

sto cercando informazioni sulla fattibilità di aggiungere un’altra community Discourse alla nostra configurazione attuale. Al momento abbiamo un’installazione WordPress multisite con una community Discourse che utilizza Discourse SSO per un sito dedicato alla community, ma con un altro provider SSO che gestisce l’accesso a WP.

Vorrei aggiungere un nuovo sito WP per una nuova community Discourse, ma non sono chiaro se sia possibile collegare più forum Discourse all’interno di questa configurazione multisite (se ha senso). Poiché SSO è configurato a livello di rete WP, sembra che non sia possibile avere più istanze di Discourse.

L’obiettivo ideale sarebbe:

  • WordPress multisite
  • 2 istanze di Discourse

(Gli utenti delle due istanze di Discourse dovrebbero avere accesso solo alla community di cui fanno parte).

Ho letto alcuni post su come configurare un WP multisite con un Discourse single-site (e viceversa), ma non ho trovato informazioni su un WP multisite con più istanze di Discourse.

Grazie

Non è possibile che i siti di un’installazione WordPress multisito funzionino come provider SSO per due istanze di Discourse. Il motivo è che in una rete multisito tutti gli utenti sono memorizzati in un’unica tabella del database. Se si consentisse a più siti di Discourse di funzionare come provider SSO per più siti della rete, non ci sarebbe un modo semplice per garantire che gli ID utente di Discourse salvati su WordPress siano univoci.

Grazie, è proprio quello che pensavo. Sarebbe possibile configurare un’istanza Discourse come provider SSO per l’altra istanza, mantenendo al contempo l’accesso corretto degli utenti alle rispettive community?

Un’istanza di Discourse può funzionare come provider SSO per un’altra istanza di Discourse. Immagino che la configurazione che stai considerando preveda WordPress come provider SSO per l’istanza 1 di Discourse, mentre l’istanza 1 di Discourse farebbe da provider SSO per l’istanza 2 di Discourse. Penso che sia possibile, ma non ho mai configurato un sito Discourse per essere contemporaneamente client SSO e provider SSO.

Con la configurazione descritta sopra, tutti gli utenti dell’istanza 1 di Discourse avrebbero accesso all’istanza 2 di Discourse. Non credo sia questo che desideri.

Un altro approccio possibile al problema sarebbe utilizzare un’unica istanza di Discourse e impiegare i permessi di gruppo per categoria per limitare quali parti del forum gli utenti possono accedere. È possibile passare i gruppi di Discourse nel payload SSO. Dovrebbe essere possibile sul tuo sito WordPress determinare a quali siti un utente ha accesso. Potresti creare un gruppo Discourse per ogni sito WordPress e poi utilizzare il filtro wpdc_sso_params per aggiungere un parametro add_groups al payload SSO.

Attualmente, il provider SSO è lo stesso di Discourse. Immagino che la (nuova) considerazione sia quella di avere l’Istanza 1 come provider SSO (sia per l’Istanza 1 che per l’Istanza 2).

In sostanza, mantenere la stessa configurazione SSO che abbiamo ora, aggiungere un’altra istanza di Discourse e comunque trovare un modo per limitare l’accesso tra l’Istanza 1 e l’Istanza 2.

Ciao @simon, sto implementando questa funzionalità e non sono sicuro del motivo per cui non vedo le opzioni SSO Client nel plugin WP Discourse. Vedi lo screenshot qui sotto

La mia connessione risulta attiva (anche l’ultima utilizzazione della chiave API lo conferma). Quando aggiungo lo shortcode [discourse_sso_client], sembra esserci un problema di configurazione: l’intestazione di risposta della posizione contiene l’URL generato dallo shortcode [discourse_sso_client] invece del payload SSO.

Questo è previsto dal design. L’opzione del client SSO è disponibile solo nelle reti multisito quando è configurata a livello di sito. Devo configurare una rete multisito nel mio ambiente di sviluppo locale per verificare nuovamente le impostazioni. Ti farò sapere in merito più tardi oggi.

Grazie - attualmente ho installato il plugin a livello di rete con il client SSO selezionato

modifica: ho individuato il problema in query-redirect.php qui:

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

Sembra che questa opzione non sia stata impostata correttamente per me - non sono sicuro se sia dovuto alla configurazione a livello di rete o altro.

La documentazione per la configurazione del plugin in una rete multisito non è aggiornata. Questa è un’ottima occasione per sistemarla e aggiornare la guida installazione e configurazione del plugin WP Discourse.

Per utilizzare la funzionalità del client SSO in una rete multisito, il plugin deve essere configurato a livello di rete. Questo si fa cliccando sul link Discourse nella tua Dashboard di Rete:

Nella pagina di rete di Discourse, seleziona l’opzione Abilita configurazione multisito. Quindi inserisci l’URL di Discourse, la chiave API e il nome utente per la pubblicazione nella sezione Impostazioni di connessione. Scorri fino in fondo alla pagina e clicca sul pulsante Salva opzioni. Dovresti vedere un messaggio “Sei connesso a Discourse!” in alto nella pagina.

Per utilizzare Discourse come provider SSO per i siti della tua rete multisito, scorri fino in fondo alla pagina di rete di Discourse e seleziona l’opzione Abilita client SSO. Aggiungi inoltre una chiave all’impostazione Segreto SSO. Salva nuovamente le opzioni.

Ora vai sul tuo sito Discourse e copia la chiave segreta nell’impostazione del sito sso provider secrets di Discourse. Inserisci il simbolo * come dominio del provider SSO. Quando l’impostazione è stata salvata, dovrebbe apparire in modo simile a questo:

Ora seleziona l’opzione enable sso provider su Discourse.

Con queste impostazioni attive, andando alla scheda SSO / Client SSO di WP Discourse per qualsiasi sito della tua rete, dovresti vedere una pagina simile a questa:

Per un test rapido, seleziona le opzioni Aggiungi link di accesso e Sincronizza utenti esistenti per email. Quindi esci dal tuo sito WordPress. Dovresti essere in grado di accedere nuovamente cliccando sul link “Accedi con Discourse” che verrà visualizzato sulla tua pagina wp-login.php.

Se non stai utilizzando la pagina di accesso predefinita di WordPress, prova a copiare lo shortcode [discourse_sso_client] in un post del tuo sito. Questo shortcode visualizza markup sulla pagina solo per gli utenti disconnessi. Puoi anche creare un link di accesso costruendo un link in questo formato:

<a href="https://example.com/?discourse_sso=1&redirect_to=https://example.comt/">Accedi con Discourse</a>

Ciò effettuerà l’accesso dell’utente al tuo sito tramite Discourse e lo reindirizzerà alla pagina WordPress impostata come valore del parametro redirect_to.

In base al tuo debug, sembra che l’opzione Abilita client SSO non fosse attivata nella tua pagina di rete di Discourse. Puoi assicurarti che tale opzione sia abilitata e farmi sapere se hai ancora problemi?

Il codice che hai trovato e che impediva il funzionamento del client SSO per te è corretto, ma presenta una condizione mal scritta:

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

Dovrebbe essere semplificato in if ( empty( $this->options['sso-client-enabled'] ) ). Questo è lo schema utilizzato ovunque nel plugin.