我们最近在使用 SSO 实现时遇到了大量问题,经过大量调试工作后终于找到了原因。
我们遇到的一些问题包括:
- 新用户无法登录论坛
- 现有用户在首次登录时,用户名末尾会被加上
7 sso_sync拒绝用户名更改
事实证明,这一切都是由于对 SSO 载荷进行了双重 URL 编码。我们先对载荷进行编码,将其放入带有签名的 URL 中,然后再次对该 URL 进行编码。由于 Base64 编码的字符串可能包含 =,这导致它被编码了两次,变成了 %253D,而不是应有的 %3D。我不清楚为什么这只会偶尔导致 Discourse 出现问题,但如果其他人也遇到类似问题,希望这能有所帮助。