vagosduke
(Vagelis Duke)
1
您好,
我们正在为一个特定的封闭社区运行一系列服务,并决定将 Discourse 作为社交平台。我想知道在技术层面上,将 Discourse 实例无缝集成到我们的服务套件中的最佳且最优雅的方式是什么。
举个例子,我们的套件包括服务 A 和服务 B(均为内部构建),以及一个 OAuth2 SSO 服务。
如果用户点击服务 A 或服务 B 中的登录按钮,他们会被重定向到 SSO 服务进行登录,然后按常规方式重定向回来。然而,借助 Cookie 和会话控制,如果用户在登录服务 A 后访问服务 B,则无需再次登录(因为他们已经拥有会话)。
同样,我们希望提供一种方式,让用户在通过 SSO 服务登录后,能够无缝地从服务 A 或服务 B 跳转到 Discourse 服务。假设所有服务中都已存在该用户的记录。目前,我们已评估过 OAuth2 Discourse 插件,它能与我们的 SSO 服务配合使用,但用户访问 Discourse 时仍需再次点击“使用 SSO 登录”。是否存在某种方法(例如通过 API 调用),在用户通过服务 A 或服务 B 的通用 SSO 登录时,自动在 Discourse 中启动会话?
此外,上述问题也延伸至通过嵌入组件进行的评论集成。如果 Discourse 服务是公开的,评论部分没有问题,评论也能正确嵌入。但如果运行的是私有 Discourse 服务,若用户未事先登录 Discourse,嵌入的评论窗口将无法正确显示评论,这在追求无缝集成时是个问题。
是否有办法解决这些问题?我在考虑构建一个中间件插件,用于解码令牌或 Cookie,并在发起实际调用之前即时认证并登录相应用户。是否存在现成的插件可以实现这一功能?
感谢您的支持。
vagosduke
(Vagelis Duke)
3
感谢您的快速回复。然而,这并未解决问题。无论是在嵌入式 Discourse 评论窗口中,还是访问 Discourse 网站时,用户(已通过 SSO 登录到“服务 A”)都需要重新登录。
在这两种情况下,我都会看到一条欢迎消息:“欢迎,需要账户。请向现有成员索取邀请,或登录以继续。”以及登录按钮。点击该按钮后,会弹出登录窗口,提示通过用户名/密码或 OAuth SSO 进行登录。由于 SSO 会话仍然有效,因此无需再次输入 SSO 的用户名和密码,但我不希望用户经历这一过程。当用户登录到“服务 A”时,应自动登录到 Discourse,而无需再次点击“登录”按钮。
我们需要怎么做才能实现这一目标?
我使用的是 Discourse 2.5.2 版本,如果这有关联的话。
Falco
(Falco)
4
在最新版本的 Discourse 中,只要同时启用了“需要登录”和“立即认证”,并且用户在身份提供商处已拥有有效的 Cookie,系统就会自动将该用户登录到 Discourse。
在早期版本中,这种“神奇”的登录流程仅限于使用我们自有 SSO 协议的站点,相关说明请参阅 Discourse 官方单点登录 (sso)。
建议您升级到最新版本。
vagosduke
(Vagelis Duke)
5
嗯,我正在使用 Bitnami 镜像,而他们的最新版本仍然是 2.5.2,所以我可能得再等一段时间(或者想办法手动更新,或者使用其他镜像)。
无论如何,感谢您为我指明正确的方向,非常感激!
Falco
(Falco)
6
请注意,bitnami 镜像不受 Discourse 开发人员支持,且多年来与软件的常规用法存在诸多不兼容之处。我强烈建议使用 Discourse 官方标准安装。