[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】1つの JWT で複数 service を verify したかったら、python-jose の audience list 仕様の罠を踏 [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

Codensの開発者が、単一のJWTを複数のサービスで検証する仕組みを構築した際に直面した問題である。設計上、トークンのaudience claimに複数の値を保持させる必要があったが、ライブラリの仕様が壁となった。


  • RFC 7519では、audienceは文字列またはリスト形式が許容されている。
  • python-joseのjwt.decodeは、引数にリストを渡すと型エラーで停止する。
  • PyJWT等の他ライブラリとは仕様の互換性がなく、ライブラリ側の修正も期待できない状態にある。

// Approach

開発者は、全サービスのライブラリ刷新という重いコストを避け、検証ロジックを分離する手法を採用した。ライブラリの機能を部分的に無効化し、不足分を自前で補完するアプローチである。


  • options={'verify_aud': False}を指定し、ライブラリによる自動検証を無効化した。
  • 署名や有効期限の検証はライブラリに任せ、セキュリティレベルを維持した。
  • トークンのaudienceを集合(set)に変換し、許可リストとの積集合(intersection)を用いて手動で照合した。

// Result

この手法により、既存の依存関係を維持したまま、目的の認証フローを安全に実現した。設計の分離が副次的なメリットをもたらしている。


  • 全サービスの認証ライブラリを入れ替える膨大なコストを回避できた。
  • 「デコード」と「検証」を分離したことで、サービスごとの個別ポリシー適用が容易になった。
  • python-joseoptionsを活用し、検証項目を細かく制御する堅牢な構造を得た。

Senior Engineer Insight

> ライブラリの仕様を過信せず、RFCとの乖離を即座に検知した判断は極めて実践的である。大規模システムにおいて、認証基盤のライブラリ刷新はリスクが非常に高い。今回のように「検証ロジックの分離」という設計パターンを選択したことは、将来の拡張性(ポリシーの個別化)に大きく寄与する。ただし、python-joseのメンテナンス状況を考慮すると、新規プロジェクトでは最初からPyJWTを選択すべきだ。ライブラリのquirk(癖)を考慮した設計は、実戦における必須スキルと言える。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。