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.

2 „Gefällt mir“

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?

1 „Gefällt mir“

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.

1 „Gefällt mir“

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.

4 „Gefällt mir“

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.

3 „Gefällt mir“

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