La création de compte OAuth échoue en raison de la détection CSRF immédiatement après la connexion à Auth0 sur le même navigateur

Nous avons configuré le plugin oauth2 en suivant les instructions de Configurer l’inscription et la connexion avec Auth0 en utilisant le plugin OAuth2 Basic.

Le flux fonctionne comme suit :

  • Les utilisateurs s’inscrivent sur \u003chttps://getdbt.com/community/join-the-community\u003e
  • Ils reçoivent un e-mail de confirmation d’Auth0
  • Ils atterrissent sur \u003chttps://getdbt.com/community/email-verified\u003e
  • Ils cliquent sur Obtenir de l’aide sur le forum communautaire, et sont redirigés vers Auth0 pour se connecter
  • Après s’être connectés, ils sont redirigés vers discourse.getdbt.com mais avec l’avertissement CSRF affiché.

S’ils cliquent sur Se connecter puis sur Utiliser votre compte communautaire dbt, le compte est créé avec succès et ils voient la boîte de dialogue de création de compte où ils peuvent définir leur nom d’utilisateur, etc.

Vidéo Loom montrant cela en action :

J’ai activé oauth2 debug auth et dans les logs, je peux voir (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

Mes questions :

  1. Est-ce un problème de Discourse ou un problème d’Auth0 ? Je suppose que c’est un problème de Discourse car un flux de connexion pratiquement identique pour Slack fonctionne sans problème.
  2. Pourquoi cela fonctionne-t-il sur la page de connexion mais pas lorsque la connexion est déclenchée du côté d’Auth0 ?
  3. Le message d’erreur CSRF par défaut implique que cela se produit lorsque le navigateur change, ou lorsque le flux de connexion prend trop de temps. Ni l’un ni l’autre n’est le cas, qu’est-ce qui pourrait d’autre en être la cause ?

Salut @joellabes - peux-tu vérifier quelle URL tu as saisie dans le paramètre Auth0 « Application Login URI » ?

Cela devrait être {your forum}/auth/oauth2_basic. Si tu as /callback à la fin, cela pourrait causer le problème que tu as décrit.

2 « J'aime »

Merci @david - pour le moment, je n’ai rien dans la zone URI de connexion de l’application, mais j’ai quelque chose dans les URL de rappel autorisées :

Dois-je mettre https://discourse.getdbt.com/auth/oauth2_basic dans le champ URI de connexion de l’application et laisser https://discourse.getdbt.com/auth/oauth2_basic/callback dans le champ URL de rappel autorisées ?

1 « J'aime »

Vous pourriez essayer cela, oui.

Pouvez-vous partager plus de détails sur la façon dont le lien « Obtenir de l’aide sur le forum communautaire » est implémenté ? Où mène le lien ? Je suppose actuellement que le bouton est géré par Auth0, et que l’ajout de cette nouvelle configuration d’URL amènera le bouton à se lier correctement à /auth/oauth2_basic pour démarrer le flux de connexion.

1 « J'aime »

Désolé pour la réponse tardive - je reviens juste après la pause de Noël !

J’ai fait ceci :

mais j’obtiens toujours le même résultat.

Ce lien pointe vers https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr, où dev-zb38hsho est notre ID d’instance Auth0 et 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr est l’ID client de l’application Discourse dans Auth0.

La visite de ce lien redirige vers https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN.

La clé est que Discourse doit démarrer le flux d’authentification à /auth/oauth2_basic, puis rediriger vers Auth0, puis revenir à /auth/oauth2_basic/callback.

J’espérais que nous pourrions amener Auth0 à déclencher la connexion en commençant par la première URL, mais il semble qu’il saute directement de Discourse à l’URL de rappel.

Pourriez-vous mettre à jour le bouton pour qu’il pointe vers /auth/oauth2_basic sur le forum ? Cela démarrera le flux d’authentification et redirigera immédiatement vers Auth0, donc l’expérience utilisateur globale devrait être la même.

4 « J'aime »

Oui, ça fonctionne ! Il s’arrête sur une page intermédiaire avec un bouton Continuer ; est-ce que l’interaction de l’utilisateur est obligatoire pour déclencher en toute sécurité un flux OAuth ou quelque chose comme ça ?

S’il y a un moyen de le faire

alors ce serait un bonus, mais c’est génial ! Merci :folded_hands:

Cette page s’affiche lorsqu’il existe plusieurs méthodes de connexion sur un site. Si vous désactivez les « connexions locales » (nom d’utilisateur/mot de passe), cela devrait passer directement au processus de connexion.

3 « J'aime »

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