我们使用基于以下指南实现的Discourse SSO流程:https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045
对我们来说效果很好。但是现在我们希望允许系统中的用户更改他们的电子邮件,这似乎会导致问题。
当我在系统中更改用户的电子邮件时,SSO到Discourse停止工作。
登录错误
您的帐户有问题。请联系网站的 管理员。
我猜想Discourse收到的有效负载中包含一封电子邮件和一个不匹配且不知道该怎么办的用户名。
什么是处理此问题的好方法?
我想出的最好的主意是在启动SSO之前,使用Discourse API更改Discourse中的用户电子邮件,以匹配输入系统。
但是我不知道这是否可能。以下是我失败的尝试。
这是我的要求:
https://forum-stage.{domain}.com/users/{username}/preferences/email
Headers:
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Body (as x-www-form-urlencoded in Postman):
email: testemail@testdomain.com
api_key: 75a...77d
api_username: system
这是我收到的回复
{
"errors": [
"You are not permitted to view the requested resource."
],
"error_type": "invalid_access"
}
答案 0 :(得分:0)
肯定有一种方法可以在SSO提供者端处理更改的电子邮件地址,因为使用Discourse作为SSO提供者时可以毫无问题地实现。
我们有一个设置,出于奇怪的原因,我们有一个Discourse站点作为SSO提供者,而其他Discourse站点则作为SSO客户。可以在Discourse SSO提供程序中更改用户电子邮件,然后在下一次登录期间将这些更改同步到SSO客户端。
我没有研究此机制的确切工作方式,但可能是通过“话语到用户记录”为SSO目的而添加的“外部ID”方案进行的。在这样的全话语SSO系统中,您必须在更改电子邮件地址后检查下一次登录的有效负载,以查看究竟发生了什么,然后可以在您自己的实现中类似地进行操作。