Dopo una ricompilazione oggi con la versione 3.3.3 (l’ultima stabile rilasciata qualche giorno fa), l’SSO ha smesso di funzionare. Gli utenti già autenticati al momento vanno ancora bene, ma le nuove sessioni terminano il flusso SSO con l’errore:
Account login timed out, please try logging in again.
Abilitando verbose discourse connect logging viene mostrato:
Verbose SSO log: Nonce is incorrect, was generated in a different browser session, or has expired
Tuttavia, nulla nel nostro flusso SSO è cambiato negli ultimi anni. Gli orologi tra i server sono sincronizzati.
D’altra parte, abbiamo aggiornato molto di recente alla versione 3.3.3 (dalla 3.3.2) che contiene correzioni di sicurezza relative a Discourse Connect che potrebbero essere correlate.
Improbabile che sia rilevante, ma la ricompilazione è servita a abilitare una CDN. Ma ho già annullato tutte quelle modifiche e il problema SSO persiste.
Qualsiasi suggerimento su come eseguire ulteriori debug?
Dopo diverse ricostruzioni, sono riuscito a far funzionare nuovamente l’SSO fissandolo alla v3.3.2, quindi sembra che qualcosa sia stato introdotto nella v3.3.3 che abbia interrotto il supporto SSO.
Ho dato una rapida occhiata a un git diff v3.3.2 v3.3.3 e nulla di ovvio è saltato fuori, ma ci sono modifiche relative a Discourse Connect.
Tuttavia, sospetto che questo inizierà a colpire più persone man mano che passeranno alla 3.3.3 e le sessioni utente inizieranno a scadere e non si rinnoveranno. Forse vale la pena dare un’occhiata più da vicino da parte di qualcuno che conosce il codice, specialmente il flusso SSO? /cc @sam
PS: Non sono sicuro se possa essere rilevante: avevo aggiornato alla 3.3.3 più di un giorno fa, ma i problemi sembrano emergere solo poco dopo una ricostruzione tramite la console poche ore fa (per abilitare una CDN, ma il ripristino di quella modifica non ha risolto l’SSO).
Sì, nel senso che la maggior parte delle persone esegue il branch tests-passed, ma no in questo senso che è l’ultima release sul branch stabile, rilasciata questa settimana: 3.3.3: Security and maintenance release
È una possibilità remota, ma stai generando il nonce in una sessione del browser diversa, ad esempio effettuando le richieste SSO dal backend della tua applicazione, invece di far passare gli utenti attraverso il processo SSO utilizzando i reindirizzamenti del browser?
Esiste un’impostazione del sito nascosta chiamata discourse_connect_csrf_protection che è abilitata per impostazione predefinita. Per consentire l’effettuazione di richieste SSO dall’esterno della sessione di un utente, è necessario disabilitarla.
Presumo che tale impostazione fosse presente nella versione 3.3.2, ma forse è stata aggiunta successivamente.
Anche se non stiamo facendo nulla di insolito con l’SSO, ho comunque provato disabilitandola nella console Rails e tutto ciò che ha fatto è stato rimuovere il messaggio di errore, nel senso che quando il provider SSO reindirizzava a Discourse, invece dell’errore Account login timed out, please try logging in again., non c’era alcun messaggio (né di errore né di altro) – ma, sfortunatamente, ero ancora disconnesso.
Anche io sto cercando disperatamente una soluzione perché è piuttosto strano. Penso che il fatto che il problema non si sia presentato quando abbiamo aggiornato inizialmente a 3.3.3 tramite l’interfaccia web, ma solo (~36 ore) dopo un rebuild da console, possa essere un indizio, ma non so abbastanza sulle differenze tra i due.
Ho provato ad aggiornare di nuovo a 3.3.3 e il problema si è ripresentato immediatamente. Tornando a 3.3.2 l’SSO ha ricominciato a funzionare.
Sospetto che il problema qui non sia la correzione di sicurezza di DiscourseConnect, ma piuttosto la modifica di nginx. Su tests-passed abbiamo dovuto fare un follow-up giovedì perché stava causando problemi in alcuni ambienti e un altro utente su Github ha segnalato problemi CSRF.
Sono felice di riferire che questo ha funzionato!
Apprezzo che tu abbia dedicato del tempo a esaminare questo problema, specialmente durante il fine settimana e dato che sia stable che SSO sono un po’ di nicchia, ma spero che aiuti anche altri. Grazie!
Terrò d’occhio il PR per il suo merge.