【要約】cognito-local + PyJWT で ImmatureSignatureError (leeway で直す) [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がcognito-localを用いたローカル開発において、ログイン直後に断続的な401エラーに直面した。この問題は、以下の要因が重なって発生している。
- ・Docker DesktopのVMとホスト間で、コンテナの時計が約2秒進んでいた。
- ・PyJWTのデフォルト設定では、未来のiat(発行時刻)を持つトークンを拒否する。
- ・時刻のズレが境界付近で揺れるため、エラーが断続的に発生し原因特定を困難にさせた。
// Approach
開発者はJWT検証時に時刻の許容誤差(leeway)を導入することで、この問題を解決した。具体的な手順は以下の通りである。
- ・
jwt.decode関数の引数にleeway=10を追加し、10秒の猶予を持たせた。 - ・
COGNITO_ENDPOINT_URLの有無を確認する条件分岐を実装した。 - ・ローカル環境のみ
leewayを適用し、本番環境では厳格な検証を維持する設計とした。
// Result
leewayの導入により、Docker環境特有のImmatureSignatureErrorが解消された。得られた成果は以下の通りである。
- ・
PyJWT 2.12.1を用いた検証により、エラーの解消を決定論的に確認した。 - ・本番環境のセキュリティを一切妥協することなく、開発体験(DX)を向上させた。
- ・環境依存の不安定な挙動を排除し、開発の生産性を確保した。
Senior Engineer Insight
> 環境間の時刻同期(Clock Skew)は、分散システムにおける古典的かつ厄介な問題である。本件の優れた点は、単にエラーを消すだけでなく、環境変数を用いて「ローカルのみ許容し、本番は厳格に保つ」という条件付き適用を選択した点にある。これは、開発効率と本番の堅牢性を両立させる実戦的な判断だ。大規模システムを扱う現場では、こうした環境差分による「間欠的な失敗」を、インフラの特性として正しく理解し、コード側で適切に吸収する設計思想が求められる。