AGGIORNAMENTO: Risolto!
Per risolvere il problema, sono riuscito ad abilitare force_https che ha risolto tutto per noi. A quanto pare, le passkey stavano tentando di instradare a http:// ma quel traffico misto non veniva segnalato dal browser. A quanto pare CloudFlare non era direttamente il problema. Spero che questo possa aiutare qualcun altro in futuro.
Post Originale:
Il Problema
Ciao! Recentemente ho spostato la mia istanza Discourse dietro un tunnel Cloudflare e sembra che tutto funzioni bene ad eccezione delle passkey. Sia le registrazioni di passkey esistenti che quelle nuove falliscono, ma non credo che i log rendano molto chiaro il MOTIVO del fallimento. Spero che qualcuno qui possa aiutarmi a trovare le restanti informazioni di troubleshooting necessarie per risolvere questo problema:
Informazioni Rilevanti
Informazioni sulla mia configurazione
- Utilizzo Discourse Docker per distribuire Discourse.
- Postgres e Redis sono distribuiti esternamente.
- Distribuito su Ubuntu su un’istanza AWS EC2.
- Come detto in precedenza, il tunnel Cloudflare fornisce TLS e funge da proxy.
Cosa ho provato
- Ho controllato la mia configurazione per assicurarmi che Discourse si aspetti il nome host dei miei forum (
forums.example.com) - Discourse è stato configurato per la porta 80 HTTP poiché Cloudflare gestisce TLS
- Quando HTTP non è riuscito, ho tentato di forzare Discourse solo a SSL fornendo un certificato autofirmato e reindirizzando Cloudflare a Discourse sulla porta 443 utilizzando il protocollo HTTPS.
- Mi sono assicurato che Cloudflare stesse passando
forums.example.comal mio sito. So che lo sta facendo poiché qualsiasi altro header host causa un 404 al NGINX di Discourse.
Log Rilevanti
- Questa parte è leggermente complicata. Discourse non fornisce nulla lato server (per quanto ne so) e sia che utilizzi Bitwarden, iCloud Keychain, Chrome o Firefox, il risultato è lo stesso.
- I log per la passkey stessa sono quasi inesistenti
- La parte più utile che ho trovato è stata dalla console degli strumenti per sviluppatori di Firefox / Chrome quando si tentava di creare una nuova passkey. Viene restituito quanto segue:
{
"errors": [
"The origin of the authentication request does not match the server origin."
]
}
Questa è un’indicazione abbastanza chiara che c’è qualcosa che non va tra il client e discourse (AKA il proxy), ma questi log non indicano quali informazioni vengono scambiate per risolvere ulteriormente questo problema.
Qualcuno può aiutarmi a capire altre impostazioni o posizioni di log da controllare, o ha altri suggerimenti per il troubleshooting? Trovo improbabile, ma suppongo che un errore nella configurazione di Nginx potrebbe anche essere un fattore. Ho essenzialmente un doppio proxy tra il client e Discourse con sia CloudFlare che Nginx in esecuzione. Dovrei riconsiderare qualche aspetto di questa configurazione?
In termini di priorità , certamente è bello averlo risolto, ma poiché ho solo circa 8 utenti su qualche migliaio che utilizzano le passkey (con altri metodi di accesso che funzionano perfettamente), non sono troppo stressato per questo.