最近、SSO 実装で多くの問題が発生しており、多くのデバッグ作業の末に原因を特定しました。
私たちの問題には以下のようなものがありました:
- 新しいユーザーがフォーラムにログインできない
- 既存ユーザーが初めてログインした際に、ユーザー名の末尾に
7が追加される sso_syncがユーザー名の変更を拒否する
実は、これらはすべて SSO ペイロードの二重 URL エンコーディングが原因でした。私たちはペイロードをエンコードし、署名と共に URL に含め、さらにそれを再度エンコードしていました。Base64 エンコードされた文字列には = が含まれる可能性があるため、本来 %3D になるべきものが、二重にエンコードされて %253D になっていました。なぜこれが Discourse の場合のみ intermittently に問題を引き起こしたのかは不明ですが、もし他の誰かが同様の問題に直面している場合、この情報が役立つことを願っています。