JWTを安全にデコードする方法
JWTをアップロードせずに安全にデコードする:デコードで何が明らかになるか、なぜデコードが検証ではないのか、APIセキュリティレビューで検査すべきクレーム(alg、exp、iss、aud、sub)。
クイックアンサー
JWTをローカルでデコードしてヘッダーとペイロードのクレーム — アルゴリズム、有効期限、発行者、受信者、主体 — を検査し、信頼できないオンラインのデコーダーにトークンを貼り付けないでください。デコードは検証ではなく、署名はAPI自体が検証しなければなりません。
定義
JWT(JSON Web Token)は認証と認可のフローに使われるコンパクトで署名付きのクレームコンテナです。分析での安全な使用はローカルでデコードし、デコードと署名検証を決して混同しないことを意味します。
最初に答える
ローカルでデコードし、クレームを検査し、覚えておいてください:デコード ≠ 検証。署名はデコーダーではなくサーバーが検証します。
1. ヘッダーをデコードする
algとtypを確認します。信頼できないライブラリやドキュメントがalg: noneを示している場合、それは安全でない解析の危険信号です。
2. ペイロードのクレームを検査する
exp(期限切れトークンを決して信頼しない)、iat、nbf、iss、aud、subを確認します。発行者と受信者が意図したサービスと一致するか確認します。
3. トークンをアップロードしない
トークンはローカルのみのツールに貼り付けます(jwt.ioなどはクリップボードを信頼できる場合のみ。できればローカルのみ)。トークンは権限を運ぶ可能性があり、パスワードのように扱ってください。
4. 限界を覚えておく
デコードはクレームを明らかにするだけで、有効性は明らかにしません。きれいにデコードされるトークンも偽造または期限切れであり得ます。検証は署名鍵を使ってサーバー側で行われます。
5. APIセキュリティへ進む
APIをレビューする際は、トークンがサーバー側で検証され(署名、有効期限、発行者、受信者)、秘密がクライアントコードに出荷されないことを確認します。
役立つツール
- JWTデコーダー — ローカルでデコード、アップロードなし。
- Base64エンコーダー/デコーダー — トークンのbase64部分を検査。