Errore di autenticazione Google

Ciao,

sono nuovo su Discourse. Ho creato di recente un forum e ora sto trasferendo il sito e il forum su un nuovo nome di dominio.

Vecchio dominio del forum: https://forum.skymail.app (non attivo, reindirizza al nuovo sito)

Nuovo dominio: https://forum.sugarmail.app (operativo)

Sto riscontrando problemi con l’autenticazione Google. Ho un progetto su Google Cloud e, dopo il passaggio al nuovo dominio, ho modificato anche l’URL di reindirizzamento sotto Client ID, che ora è impostato su:

https://forum.sugarmail.app/auth/google_oauth2/callback

Ora il problema. Quando provo a “registrarmi con Google”, ricevo questo errore in Discourse:

https://forum.sugarmail.app/auth/failure?message=csrf_detected Autorizzazione scaduta o hai cambiato browser. Riprova.

Quando il forum era sotto il vecchio dominio, forum.skymail.app, l’autenticazione Google funzionava senza problemi.

Ho eseguito ./launcher rebuild app dopo aver cambiato il dominio, assicurandomi di aggiornare il dominio in app.yaml sotto DISCOURSE_HOSTNAME (in effetti il forum non si caricava affatto finché non lo facevo).

Qualche suggerimento, per favore?

Normalmente, quando avviate il flusso di accesso, il cookie _forum_session viene impostato nel vostro browser. Tuttavia, sul vostro sito, ciò non sembra accadere.

Avete plugin o proxy che potrebbero interferire con i cookie sul vostro sito?

Grazie per la risposta.

Plugin: no, non ne sto utilizzando nessuno. L’unica cosa che ho fatto dopo l’installazione è stata abilitare l’autenticazione Google (client ID e segreto) e attivare “usa sempre HTTPS”.

Proxy: sto usando nginx come reverse proxy (che serve anche il sito principale dell’applicazione).

    # discourse
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass_request_headers on;
            proxy_pass http://localhost:10080;
    }

e in containers/app.yaml

expose:
  - "10080:80"   # http
  - "10443:443" # https

Let’s Encrypt nelle impostazioni di Discourse non è abilitato. Quindi nginx all’interno del container serve HTTP in chiaro, mentre il nginx esterno gestisce la terminazione SSL.

Questa è quasi la stessa configurazione che avevo con il vecchio dominio; l’unica differenza è “forza HTTPS”.

Sto eseguendo la versione 2.6.0.beta3.

Oh, maledizione, è “force https” che avevo precedentemente disattivato.

L’ho abilitato di recente per evitare di ricevere l’avviso in Chrome riguardo a “contenuti della pagina non sicuri”, che si verificava a causa di collegamenti HTTP in chiaro alle immagini.

Per ribadire, effettuo la terminazione SSL nell’nginx “esterno” e, per quanto riguarda lo stesso Discourse, non c’è SSL.

Disattivando “force https”, l’autenticazione Google funziona di nuovo (ho dovuto aggiungere un URL di reindirizzamento HTTP in chiaro nel progetto Google Cloud).

Ma non è una buona soluzione perché appariranno avvisi di “sito non sicuro” o contenuti misti non appena ci saranno immagini.

Esiste un modo per mantenere l’autenticazione Google funzionante con “force https” e la terminazione SSL al di fuori di Discourse?

( Vorrei utilizzare il supporto SSL nativo di Discourse, ma presuppone che “possieda” il dominio, quindi dovrei configurare un indirizzo IP aggiuntivo per questo VPS e separare il sito principale dal forum… il che è un po’ laborioso… )

Assicurati di inviare X-Forwarded-Proto: https.

Grazie @riking, ho ora copiato il blocco nginx dal tuo link parola per parola, poi ho abilitato “force https” come consigliato dalla console di amministrazione di Discourse.

Il mio forum è di nuovo operativo e l’autenticazione Google funziona.

C’è però ancora un problema:

Sia Chrome che Firefox mi stanno mostrando avvisi relativi a contenuti della pagina non sicuri.

Analizzando il tracciato di rete negli strumenti per sviluppatori di Chrome, si tratta di questo link (http in chiaro, non https):

http://forum.sugarmail.app/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_512x512.png

Ah, non importa. Ho appena impostato una nuova favicon personalizzata e ora viene recuperata tramite HTTPS. Nessun altro avviso di “contenuto misto”.

Bellissimo, grazie per il tuo aiuto!