La creazione dell'account OAuth fallisce a causa del rilevamento CSRF subito dopo l'accesso ad Auth0 nello stesso browser

Abbiamo configurato il plugin oauth2 seguendo le istruzioni su Configura iscrizione e accesso con Auth0 utilizzando il plugin OAuth2 Basic.

Il flusso funziona come segue:

  • Gli utenti si iscrivono su \u003chttps://getdbt.com/community/join-the-community\u003e
  • Ricevono un’email di conferma da Auth0
  • Atterrano su \u003chttps://getdbt.com/community/email-verified\u003e
  • Fanno clic su Ottieni aiuto sul forum della community e vengono portati su Auth0 per accedere
  • Dopo l’accesso, vengono reindirizzati a discourse.getdbt.com ma con visualizzato l’avviso CSRF.

Se fanno clic su Accedi e poi su Usa il tuo account della community dbt, l’account viene creato con successo e vedono la finestra di dialogo di creazione dell’account in cui possono impostare il proprio nome utente, ecc.

Video Loom che mostra questo in azione:

Ho abilitato oauth2 debug auth e nei log posso vedere (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

Le mie domande:

  1. Si tratta di un problema di Discourse o di Auth0? Presumo Discourse poiché un flusso di accesso quasi identico per Slack funziona senza problemi.
  2. Perché questo funziona nella pagina di accesso ma non quando l’accesso viene attivato dal lato Auth0?
  3. Il messaggio di errore CSRF predefinito implica che si verifica quando il browser cambia o quando il flusso di accesso richiede troppo tempo. Nessuna di queste condizioni è vera, cos’altro potrebbe causarlo?

Ciao @joellabes, potresti controllare quale URL hai inserito nell’impostazione di Auth0 “Application Login URI”?

Dovrebbe essere {il tuo forum}/auth/oauth2_basic. Se hai /callback alla fine, questo potrebbe causare il problema che hai descritto.

2 Mi Piace

Grazie @david - al momento non ho nulla nella casella URI di accesso dell’applicazione, ma ho qualcosa negli URL di callback consentiti:

Dovrei inserire https://discourse.getdbt.com/auth/oauth2_basic nel campo URI di accesso dell’applicazione e lasciare https://discourse.getdbt.com/auth/oauth2_basic/callback nel campo URL di callback consentiti?

1 Mi Piace

Potresti provare, sì.

Puoi condividere maggiori dettagli su come è implementato il link “Ottieni aiuto sul forum della community”? Dove porta il link? Attualmente presumo che il pulsante sia gestito da Auth0 e che l’aggiunta di quella nuova configurazione URL farà sì che il pulsante si colleghi correttamente a /auth/oauth2_basic per avviare il flusso di accesso.

1 Mi Piace

Mi scuso per la risposta lenta, sono appena tornato dopo la pausa natalizia!

Ho fatto questo:

ma ottengo ancora lo stesso risultato.

Quel link punta a https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr, dove dev-zb38hsho è il nostro ID istanza Auth0 e 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr è il Client ID per l’applicazione Discourse in Auth0.

Visitare quel link reindirizza a https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN.

La chiave è che Discourse deve avviare il flusso di autenticazione su /auth/oauth2_basic, quindi reindirizzare ad Auth0, quindi tornare a /auth/oauth2_basic/callback.

Speravo che potessimo far avviare il login ad Auth0 partendo dal primo URL, ma sembra che stia saltando Discourse direttamente all’URL di callback.

Potresti aggiornare il pulsante in modo che punti a /auth/oauth2_basic sul forum? Questo avvierà il flusso di autenticazione e reindirizzerà immediatamente ad Auth0, quindi l’esperienza utente complessiva dovrebbe essere la stessa.

4 Mi Piace

Sì, funziona! Si ferma su una pagina intersitiziale con un pulsante Continua; l’interazione dell’utente è obbligatoria per attivare in modo sicuro un flusso OAuth o qualcos’altro?

Se c’è un modo per farlo

allora sarebbe un bonus, ma questo è fantastico! Grazie :folded_hands:

Questa pagina viene visualizzata quando ci sono più metodi di accesso su un sito. Se disabiliti gli ‘accessi locali’ (nome utente/password), dovrebbe procedere direttamente al processo di accesso.

3 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.