La creación de cuenta OAuth falla debido a la detección de CSRF inmediatamente después de iniciar sesión en Auth0 en el mismo navegador

Hemos configurado el plugin oauth2 siguiendo las instrucciones de Configurar registro e inicio de sesión con Auth0 usando el plugin OAuth2 Basic.

El flujo funciona de la siguiente manera:

Si hacen clic en Iniciar sesión y luego en Usar su cuenta de la comunidad dbt, la cuenta se crea con éxito y ven el diálogo de creación de cuenta donde pueden configurar su nombre de usuario, etc.

Vídeo de Loom que muestra esto en acción:

He habilitado oauth2 debug auth y en los registros puedo ver (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

Mis preguntas:

  1. ¿Es un problema de Discourse o de Auth0? Supongo que de Discourse, ya que un flujo de inicio de sesión casi idéntico para Slack funciona sin problemas.
  2. ¿Por qué funciona esto en la página de inicio de sesión pero no cuando el inicio de sesión se activa desde el lado de Auth0?
  3. El mensaje de error CSRF predeterminado implica que ocurre cuando el navegador cambia o cuando el flujo de inicio de sesión tarda demasiado. Ninguno de esos es el caso, ¿qué más podría estar causándolo?

Hola @joellabes, ¿puedes comprobar qué URL has introducido en la configuración de Auth0 de "URI de inicio de sesión de la aplicación"?

Debería ser {tu foro}/auth/oauth2_basic. Si tienes /callback al final, eso podría causar el problema que has descrito.

2 Me gusta

Gracias @david. Ahora mismo no tengo nada en el campo URI de inicio de sesión de la aplicación, pero sí tengo algo en las URLs de redirección permitidas:

¿Debería poner https://discourse.getdbt.com/auth/oauth2_basic en el campo URI de inicio de sesión de la aplicación y dejar https://discourse.getdbt.com/auth/oauth2_basic/callback en el campo URLs de redirección permitidas?

1 me gusta

Podrías intentarlo, sí.

¿Puedes compartir más detalles sobre cómo se implementa el enlace “Obtener ayuda en el Foro de la Comunidad”? ¿A dónde va el enlace? Actualmente supongo que el botón es manejado por Auth0 y que agregar esa nueva configuración de URL hará que el botón enlace correctamente a /auth/oauth2_basic para iniciar el flujo de inicio de sesión.

1 me gusta

Disculpa la tardanza en responder. ¡Acabo de regresar después de las vacaciones de Navidad!

Hice esto:

pero sigo obteniendo el mismo resultado.

Ese enlace apunta a https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr, donde dev-zb38hsho es nuestro ID de instancia de Auth0 y 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr es el ID del cliente para la aplicación Discourse en Auth0.

Visitar ese enlace redirige a https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN.

La clave es que Discourse necesita iniciar el flujo de autenticación en /auth/oauth2_basic, luego redirigir a Auth0, y después volver a /auth/oauth2_basic/callback.

Esperaba que pudiéramos conseguir que Auth0 iniciara el inicio de sesión comenzando con la primera URL, pero parece que está saltando Discourse directamente a la URL de devolución de llamada.

¿Podrías actualizar el botón para que apunte a /auth/oauth2_basic en el foro? Eso iniciará el flujo de autenticación y redirigirá inmediatamente a Auth0, por lo que la experiencia de usuario general debería ser la misma.

4 Me gusta

¡Sí, eso funciona! Hace una pausa en una página intermedia con un botón Continuar; ¿la interacción del usuario es obligatoria para activar de forma segura un flujo de OAuth o algo así?

Si hay una manera de hacerlo

entonces sería un plus, ¡pero esto es genial! ¡Gracias! :folded_hands:

Esa página se muestra cuando hay varios métodos de inicio de sesión en un sitio. Si deshabilita los ‘inicios de sesión locales’ (nombre de usuario/contraseña), debería pasar directamente al proceso de inicio de sesión.

3 Me gusta

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