FessのOIDCプラグインに、認証要求とIDトークンをnonceで対応付ける修正が提案されています。以前のissuer・有効期限・対象クライアントの検証に加わる変更で、プロバイダーとの互換性に影響します。
ログインごとに発行してコールバックで照合する
修正案では、認証要求ごとにランダムなnonceを作り、stateとともにセッションへ保存します。プロバイダーから返ったIDトークンのnonceクレームが文字列で、保存値と一致することを確認します。
nonceがない、文字列ではない、値が違う、セッションに対応値がない場合は拒否します。コールバック到着時にセッションのnonceを取り除くため、同じコールバックを再利用する前提にもできません。nonceそのものは警告ログへ出しません。
初期値や無効化スイッチはない
この検証を任意で緩める設定は提案されていません。修正を含むプラグインを使う場合、プロバイダーが認証要求のnonceをIDトークンへ反映する必要があります。
検証環境で通常のログインを試し、認証要求からトークンまで対応する値が返ることを確認します。ログへトークンやnonceの値を出す運用は避け、拒否時はログインをやり直して設定を確認します。
プラグイン更新前に開始したログインは、セッションにnonceを持たないため一度失敗し、最初からやり直す必要があります。更新時の問い合わせ対応へ織り込んでおくとよい点です。
ほかの検証も引き続き確認する
nonceを追加しても、すべてのOIDC機能を実装するわけではありません。このPRではPKCE、iat、nbfの検証は追加されません。issuerの指定やHTTPS、既存のクレーム検証と併せて確認してください。
以前の記事にある「nonce未実装」という制限を変える提案ですが、マージ・配布を確認するまでは実運用で利用可能と判断しないでください。