OAuth账户创建因CSRF检测失败,在同一浏览器登录Auth0后立即发生

我们已按照使用 OAuth2 Basic 插件配置 Auth0 注册和登录中的说明配置了 oauth2 插件。

流程如下:

如果他们点击登录然后使用您的 dbt 社区帐户,则帐户会成功创建,并且他们会看到可以设置用户名的帐户创建对话框等。

Loom 视频展示了此操作:

我已启用 oauth2 debug auth,并在日志中可以看到 (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

我的问题:

  1. 这是 Discourse 问题还是 Auth0 问题?我假设是 Discourse 问题,因为类似的 Slack 登录流程可以正常工作。
  2. 为什么在登录页面上有效,但在从 Auth0 端触发登录时无效?
  3. 默认的 CSRF 错误消息表明它发生在浏览器更改时,或者登录流程花费的时间太长。这两种情况都不是,还有什么可能导致此问题?

您好 @joellabes - 请检查您在“应用程序登录 URI”Auth0 设置中输入的 URL 是什么?

它应该是 {your forum}/auth/oauth2_basic。如果您在末尾添加了 /callback,则可能会导致您描述的问题。

2 个赞

感谢 @david - 目前我在“应用程序登录 URI”框中没有任何内容,但在“允许的回调 URL”中有内容:

我应该将 https://discourse.getdbt.com/auth/oauth2_basic 放在“应用程序登录 URI”字段中,并将 https://discourse.getdbt.com/auth/oauth2_basic/callback 留在“允许的回调 URL”字段中吗?

1 个赞

当然可以。

您能否分享更多关于“在社区论坛获取帮助”链接的实现细节?该链接指向何处?我目前假设该按钮由 Auth0 处理,并且添加新的 URL 配置将使该按钮正确链接到 /auth/oauth2_basic 以启动登录流程。

1 个赞

抱歉回复缓慢——刚从圣诞假期回来!

我做了这个:

但结果仍然一样。

该链接指向 https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr,其中 dev-zb38hsho 是我们的 Auth0 实例 ID,5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr 是 Auth0 中 Discourse 应用程序的客户端 ID。

访问该链接会重定向到 https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN

关键在于 Discourse 需要从 /auth/oauth2_basic 开始身份验证流程,然后重定向到 Auth0,最后返回到 /auth/oauth2_basic/callback

我曾希望 Auth0 能通过以第一个 URL 开始来触发登录,但听起来它直接将 Discourse 跳转到了回调 URL。

您能否将论坛上的按钮更新为指向 /auth/oauth2_basic?这将启动身份验证流程并立即重定向到 Auth0,因此整体用户体验应该是一样的。

4 个赞

是的,这样可以!它确实会暂停在一个带有“继续”按钮的中间页面;用户交互是否是安全触发 OAuth 流程所必需的,还是其他原因?

如果有一种方法可以做到

那将是锦上添花,但这已经很棒了!谢谢你 :folded_hands:

当网站上有多种登录方式时,会显示该页面。如果禁用“本地登录”(用户名/密码),它应该会直接进入登录过程。

3 个赞

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