OAuth-Kontoerstellung schlägt wegen CSRF-Erkennung fehl, unmittelbar nach der Anmeldung bei Auth0 im selben Browser

Wir haben das OAuth2-Plugin gemäß den Anweisungen unter Konfigurieren Sie die Anmeldung und das Einloggen mit Auth0 unter Verwendung des OAuth2 Basic Plugins konfiguriert.

Der Ablauf funktioniert wie folgt:

Wenn sie auf Anmelden und dann auf Ihr dbt Community-Konto verwenden klicken, wird das Konto erfolgreich erstellt und sie sehen den Dialog zur Kontoerstellung, in dem sie ihren Benutzernamen usw. festlegen können.

Loom-Video, das dies in Aktion zeigt:

Ich habe oauth2 debug auth aktiviert und in den Protokollen sehe ich (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected.

Meine Fragen:

  1. Ist dies ein Discourse-Problem oder ein Auth0-Problem? Ich gehe davon aus, dass es sich um ein Discourse-Problem handelt, da ein praktisch identischer Anmeldeflow für Slack ohne Probleme funktioniert.
  2. Warum funktioniert dies auf der Anmeldeseite, aber nicht, wenn die Anmeldung von der Auth0-Seite ausgelöst wird?
  3. Die Standard-CSRF-Fehlermeldung impliziert, dass sie auftritt, wenn sich der Browser ändert oder der Anmeldeflow zu lange dauert. Beides trifft nicht zu, was könnte es noch verursachen?

Hallo @joellabes – können Sie bitte prüfen, welche URL Sie in der Auth0-Einstellung „Application Login URI“ eingegeben haben?

Es sollte {Ihr Forum}/auth/oauth2_basic sein. Wenn Sie /callback am Ende haben, könnte das das von Ihnen beschriebene Problem verursachen.

Danke @david – im Moment habe ich nichts im Feld „Application Login URI“, aber etwas in den „Allowed Callback URLs“:

Sollte ich https://discourse.getdbt.com/auth/oauth2_basic in das Feld „Application Login URI“ eintragen und https://discourse.getdbt.com/auth/oauth2_basic/callback im Feld „Allowed Callback URLs“ belassen?

Das könnten Sie tun, ja.

Können Sie mehr Details dazu teilen, wie der Link „Hilfe im Community-Forum erhalten“ implementiert ist? Wohin führt der Link? Ich gehe derzeit davon aus, dass die Schaltfläche von Auth0 gehandhabt wird und dass das Hinzufügen dieser neuen URL-Konfiguration dazu führt, dass die Schaltfläche korrekt auf /auth/oauth2_basic verknüpft wird, um den Anmeldevorgang zu starten.

Entschuldigen Sie die langsame Antwort – ich bin gerade nach den Weihnachtsferien zurück!

Ich habe das hier gemacht:

aber erhalte immer noch das gleiche Ergebnis.

Dieser Link verweist auf https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr, wobei dev-zb38hsho unsere Auth0-Instanz-ID und 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr die Client-ID für die Discourse-Anwendung in Auth0 ist.

Wenn Sie diesen Link besuchen, werden Sie zu https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN weitergeleitet.

Der Schlüssel ist, dass Discourse den Authentifizierungsfluss unter /auth/oauth2_basic starten muss, dann zu Auth0 weiterleitet und dann zurück zu /auth/oauth2_basic/callback kommt.

Ich hatte gehofft, wir könnten Auth0 dazu bringen, den Login auszulösen, indem wir mit der ersten URL beginnen, aber es scheint, als würde es Discourse direkt zur Callback-URL springen.

Könnten Sie den Button so aktualisieren, dass er auf /auth/oauth2_basic im Forum zeigt? Das startet den Authentifizierungsfluss und leitet sofort zu Auth0 weiter, sodass die allgemeine Benutzererfahrung gleich bleibt.

Ja, das funktioniert! Es wird auf einer Zwischenseite mit einer Schaltfläche “Weiter” angehalten. Ist eine Benutzerinteraktion erforderlich, um einen OAuth-Flow sicher auszulösen oder so etwas?

Wenn es eine Möglichkeit gibt, es zu tun

dann wäre das ein Bonus, aber das ist großartig! Danke :folded_hands:

Diese Seite wird angezeigt, wenn es mehrere Anmeldemethoden auf einer Website gibt. Wenn Sie ‘lokale Anmeldungen’ (Benutzername/Passwort) deaktivieren, sollte dies direkt zum Anmeldevorgang führen.