Drupal Discourse SSO 问题

您好,

我是 Discourse 的新手,正尝试使用 Discourse SSO 模块将我的论坛与 Drupal 网站集成。我遵循了该模块的说明以及此主题中的内容,但遗憾的是,URL “mydrupalwebsite.com/discourse/sso” 返回了 404 错误。

自该主题发布以来,该模块增加了使用 API 密钥的新设置,但我不清楚该如何使用它。

有人遇到过同样的问题吗?

谢谢

您能分享一下您正在使用的 Drupal 模块的链接吗?如果是这篇帖子中链接的模块,它上次更新于 2015 年 3 月,因此很可能存在一些问题。

这个 Drupal SSO 模块于 2019 年 12 月更新:https://www.drupal.org/project/discourse_sso。值得尝试一下。

我正在使用第二个,并且是最新版本。

我已经设置了 SSO 密钥和 SSO 网址,但在尝试登录时,虽然能看到预期的重定向,但 /discourse/sso 却返回了 404 页面。

该模块是否有文档?启用 SSO 的常规流程是:将 SSO 端点添加到 Discourse 的 sso url 站点设置,将 SSO 密钥添加到 sso secret 站点设置,然后启用 enable sso 站点设置。初次设置时,您可能还需要启用 verbose sso logging 站点设置。启用该设置后,您可以在站点的错误日志(位于“管理 / 日志 / 错误日志”)中查看有关 SSO 错误的详细信息。

启用 Discourse 设置后,请确保已将您的 Discourse 站点 URL 和 sso secret 添加到 SSO 提供商站点。

根据您遇到的错误,很可能是您的 Discourse 站点尚未启用 enable sso 站点设置。

如果在启用 SSO 后访问 Discourse 站点时遇到问题,作为管理员,您可以通过访问 Discourse 站点的 /u/admin-login 来绕过 SSO 登录。在页面表单中输入您的管理员电子邮件地址,系统将向您发送一次性登录链接。

非常感谢您的帮助。不幸的是,该模块的文档仅限于其项目页面。

我只检查了“启用 SSO”、“详细 SSO 日志”选项,并在“SSO URL”字段中填写了“mywebsite/discourse/sso”,同时填写了“SSO 密钥”字段。

我遵循了 Drupal 模块的指南,在相应字段中输入了 Discourse 论坛的 URL 和 SSO 密钥。

但我尝试登录时仍然收到 404 错误,URL 如下:
https://mywebsite/discourse/sso?sso=bm9uY2U9MTJlMmI4ZWNjNzU4ZGE3YTg5ZWIwZDI2MmM5ZTUzOWEmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZmb3J1bXMuc2VnYS1tYWcuY29tJTJGc2Vzc2lvbiUyRnNzb19sb2dpbg%3D%3D&sig=96726cef3a6bb69a0863f66fb0e09ce3edb1ea77f3fd2d9e69cdaf932aede6a2

以下是日志:verbose_sso.txt|附件 (5.9 KB)

如果问题不在 Discourse 的设置中,我将再次联系该模块的开发者。

再次感谢。

我查看了该日志条目,但它并未显示错误——它只是 Discourse 上 SSO 过程开始的日志记录。在此之后不久应该会生成另一个显示错误的日志条目。能否请您再次尝试该流程?每次登录尝试都应生成相应的“详细 SSO 日志”条目。第一个条目显示 Discourse 上的过程开始,第二个条目则与 Discourse 如何处理从您的网站收到的响应有关。

有可能存在其他相关的错误消息,其开头并非“详细 SSO 日志”。请查看您发起 SSO 请求前后时间段的日志条目。

我再次尝试,收到了三条完全相同的日志消息,与之前的一条相同。如果按此推断,那意味着我的网站根本没有响应。

是的,听起来没错。你可以尝试打开浏览器的开发者工具,切换到“网络”选项卡,查看发出的请求。在该选项卡上勾选“保留日志”选项,然后点击你 Discourse 网站上的登录链接。

您好,

关于此事的简要更新:Discourse SSO 模块 已打补丁,不再导致站点崩溃。

但它仍然无法正常工作,因为一旦登录,就无法正确注销。另一个问题 已提交,如果有人愿意查看,欢迎参与。

感谢您跟进此事!如果模块的新问题得到解决,请告诉我们。

好的,我仍在继续我的调查。

有没有什么原因导致我无法通过 SSO 使用不同账户登录 Discourse?也许是 Cookie 设置的问题?

启用 SSO 后,如果我退出登录再尝试重新登录,系统会自动以第一个账户登录。

不过,当我禁用 SSO 时,没有任何问题。

这听起来像是登出 Discourse 的操作并未与登出 SSO 提供商网站的操作同步。由于您仍然登录在 SSO 提供商网站上,下次点击 Discourse 登录链接时,系统会基于您在 SSO 提供商的登录状态进行身份验证。

Discourse 的 logout redirect 站点设置可用于将用户登出 SSO 提供商网站。当用户登出 Discourse 时,他们将被自动重定向到该 URL。SSO 提供商需要处理该 URL 以完成用户登出。不过,我对 Drupal 不够熟悉,无法确定具体需要如何实现这一功能。

好的,问题已解决。总结如下:

  • 此模块 运行正常,仅 Drupal 用户头像存在一个 bug,但已有补丁待发布;
  • 此帖子 中关于 Discourse 设置的说明有误:sso_url 应以 /discourse_sso 结尾,而不是 /discourse/sso
  • 如果您希望使用多个不同账户登录,必须将 http://mywebsite/user/logout 设置为登出重定向地址,并且如果您在 Discourse 网站上使用了 Ghostery 插件,请在浏览器中禁用它。

感谢您的帮助,@simon