SSOペイロードの二重URLエンコーディングに注意

最近、SSO 実装で多くの問題が発生しており、多くのデバッグ作業の末に原因を特定しました。

私たちの問題には以下のようなものがありました:

  • 新しいユーザーがフォーラムにログインできない
  • 既存ユーザーが初めてログインした際に、ユーザー名の末尾に 7 が追加される
  • sso_sync がユーザー名の変更を拒否する

実は、これらはすべて SSO ペイロードの二重 URL エンコーディングが原因でした。私たちはペイロードをエンコードし、署名と共に URL に含め、さらにそれを再度エンコードしていました。Base64 エンコードされた文字列には = が含まれる可能性があるため、本来 %3D になるべきものが、二重にエンコードされて %253D になっていました。なぜこれが Discourse の場合のみ intermittently に問題を引き起こしたのかは不明ですが、もし他の誰かが同様の問題に直面している場合、この情報が役立つことを願っています。

「いいね!」 4