Problema SSO: parametri SSO o SIG mancanti

Sembra probabile che qualcosa non sia configurato correttamente. Forse prova a fare un passo indietro. Al momento non ho un sito provider SSO configurato nella mia installazione locale, ma questo potrebbe aiutarti in parte.

Su Discourse, assicurati che le seguenti impostazioni siano configurate:

L’impostazione discourse connect url dovrebbe essere impostata sull’URL che gestisce il codice che hai pubblicato.

Imposta l’impostazione discourse connect secret su una stringa di testo lunga almeno 10 caratteri. Nota che hai la stringa di 7 caratteri keyhere codificata in modo fisso nel codice che hai pubblicato. Presumo che tu stia modificando quel valore quando esegui il codice. Impostalo sullo stesso valore che hai inserito su Discourse.

Ora disconnettiti dal tuo sito Discourse. Apri l’ispettore web del tuo browser nella scheda di rete. Fai clic sul pulsante “Login” su Discourse. Dovresti vedere richieste simili alle prime due richieste nello screenshot qui sotto:

La prima richiesta sarà a http://forum.example.com/session/sso?return_path=%2F

La richiesta successiva dovrebbe essere a https://example.com/?sso=<payload_sso_inviato_da_discourse>&sig=<firma_sso>

example.com e forum.example.com dovrebbero essere impostati sui domini effettivi che stai utilizzando.

Se tutto è configurato correttamente, mi aspetterei che questo assegni i valori dei parametri sso e sig alle variabili che hai impostato qui:

$sso = $_GET['sso'];
$sig = $_GET['sig'];

Se fossi io, probabilmente commenterei il resto del codice e mi limiterei a confermare che puoi ricevere il payload e assegnarlo alle variabili.

Con DiscourseConnect abilitato, puoi accedere nuovamente al tuo sito Discourse visitando il percorso /u/admin-login. Se hai accesso alla console Rails del sito Discourse, puoi anche accedere disabilitando DiscourseConnect dalla console Rails:

SiteSetting.enable_discourse_connect = false

È possibile che ci siano errori più avanti nel codice che hai pubblicato. Ad esempio, penso che tu debba chiamare urldecode sul valore del parametro sso prima di generare la firma prevista. Dai un’occhiata a come lo gestisce il plugin WP Discourse:

$payload nella funzione sopra è solo il valore del parametro di query sso, dopo che è stato sanificato qui: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

1 Mi Piace