SSO di Discourse con Wordpress funziona solo con l'URL /core/wp-admin

Ho implementato un nuovo plugin per WordPress che si basa sull’SSO di Discourse, ma ho riscontrato un bizzarro bug che colpisce solo la versione live del sito.

In locale riesco ad accedere e utilizzare il parametro redirect_url per tornare alla pagina desiderata. Tuttavia, sul sito live, l’SSO funziona solo se il redirect_url è l’URL di wp-admin, ad esempio:

SSO funziona perfettamente…
https://www.example.com/core/wp-login.php?redirect_to=https%3A%2F%2Fwww.example.com%2Fcore%2Fwp-admin%2F&reauth=1

L’SSO non autentica correttamente, ma reindirizza semplicemente alla pagina di login/post
https://www.example.com/core/wp-login.php

Vi è mai capitato qualcosa del genere? Avete qualche idea su dove cercare? Se il problema persiste, dovrò creare il mio meccanismo di reindirizzamento per intercettare wp-admin.

Sono abbastanza sicuro che ci sia un proxy inverso mal configurato o qualcosa di simile in gioco. Per caso stai usando Cloudflare?

Sì, è Cloudflare: ci sono impostazioni su Cloudflare che possiamo provare?

Disattiva la nuvola arancione.

Haha, non è una decisione mia, il sito utilizza Cloudflare come cache principale. Dovrò fare qualche ricerca sui reverse proxy e vedere se riesco a modificare alcune impostazioni su CF

Ci sono dozzine di argomenti sui problemi causati dalle ottimizzazioni di Cloudflare. Potresti utilizzare Cloudflare come CDN, in modo che Discourse reindirizzi solo i contenuti che possono essere memorizzati nella cache tramite Cloudflare.

In alternativa, puoi disattivarlo temporaneamente e verificare se questo risolve il problema.

Disabilita semplicemente “performance” e “rocket loader” di Cloudflare su Discourse tramite le regole delle pagine; questo dovrebbe risolvere il problema per te.

Sì, si tratta di una strana combinazione di problemi, che sembra dipendere parzialmente anche dalla directory di installazione di WP. Per il momento ho implementato una soluzione alternativa che reindirizza sempre a /core/wp-admin; successivamente, un parametro ?final_redirect_url finale viene intercettato dal mio hook, che esegue le azioni necessarie per riportarci dove desideriamo.

Sembra che tu stia utilizzando WP Discourse – WordPress plugin | WordPress.org con l’opzione Client SSO abilitata (Discourse è il provider SSO). Puoi confermare che sia così?