開発者ツール · JWT デコーダー
JWT ヘッダーの説明: alg、typ、kid、および信頼できないフィールド
· 仕組み
jwt セキュリティ 認証
ヘッダーは、トークンがどのように署名されたか、およびどの鍵を使用するかを検証者に伝えます。この投稿では、各一般的なヘッダー フィールド、検証者が依存できるもの、およびトークン自体を決して信頼してはいけないフィールドについて説明します。
誰も読まない小さな JSON オブジェクト — およびそれが影響する検証の決定
ヘッダーは見落としてしまうほど小さいですが、そのフィールドは検証ルーティングに関与することがよくあります。そのため、可視性と権威を混同するのは危険です。 ToolAcre はヘッダーを JSON オブジェクトとしてデコードし、そのプロパティを表示しますが、すべてのバイトはトークン所有者からのものであり、信頼できない入力のままになります。
検証者は、信頼できる構成から確立された制約内でのみヘッダー値を使用できます。トークンに、受け入れられるアルゴリズム、発行者、またはリモート鍵ソースを作成させてはなりません。デコーダのジョブは、読み取り可能な JSON と警告で終了します。キーを選択したり、許可または拒否の決定を行ったりすることはありません。
alg 表示: デコーダーは、その実装で指定されたアルゴリズムのみを説明します。
`alg` は、トークンが使用したと主張するアルゴリズムを宣言します。 ToolAcre には、HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384、および PS512 に関する説明メモと、`none` に関する警告が含まれています。その他の文字列は、サポートされているものとして扱われず、認識されないものとして表示されます。
このリストは表示機能であり、ToolAcre が検証できるアルゴリズムのカタログではありません。アルゴリズムはどれも検証しません。バックエンドは、許可された選択肢を個別に固定し、不一致を拒否する必要があります。 `alg: RS256` を読み取っても、`alg: none` を読み取っても署名されていないトークンを安全に認証できないのと同様に、RSA が使用されたことを証明することはできません。
typ および cty — トークン タイプ、アクセス トークンの at+jwt プロファイル、およびネストされた JWT を宣言します。
`typ` は、プロデューサーが意図するメディア タイプまたはプロファイルを記述します。 ToolAcre は、文字列値が `JWT` と異なる場合に警告します。プロファイルのセマンティクスは強制されません。 `cty` フィールドはネストされたコンテンツを記述することができますが、現在のデコーダーにはネストされたトークンの処理パスがなく、そのフィールドは解釈されません。
明示的な型付けは、検証者がそのポリシーで期待値を定義するときに、異なるトークン クラスを分離しておくのに役立ちます。小切手は引き続きその検証者に属します。優先ラベルを通知するだけではトークン自体をアクセス トークンにすることはできず、デコード パネルはどのアプリケーション エンドポイントがトークンを消費するかを決定できません。
kid — 検証者がダウンタイムなしで鍵をローテーションできるようにする鍵識別子
`kid` はキー識別子であり、キーマテリアルや所有権の証明ではありません。複数の信頼されたキーをローテーションするサービスは、認証された発行者のコンテキストと制約された識別子を使用して候補を見つけることができます。識別子は、ファイル パス、クエリ フラグメント、または任意の URL ではなく、制御された検索への入力のままでなければなりません。
ToolAcre は、ヘッダー JSON に `kid` を表示したままにしますが、解決しません。この制約が重要です。公開デコード ページでは信頼できるキー ストアを使用できません。 401 がローテーションに従う場合は、トークンの提案されたキーが正当であると想定せずに、表示された識別子をサーバー側のキー インベントリおよびログと比較します。
jku、x5u、jwk、および x5c — キーを指すヘッダー フィールドと、検証者がキーを盲目的にフェッチしたり信頼したりしてはいけない理由
`jku` や `x5u` などのフィールドは場所に名前を付けることができ、`jwk` や `x5c` はキー関連のデータを保持できます。それらの存在によって、その場所や値が信頼されるわけではありません。未検証のヘッダーが提供されたという理由だけで URL をフェッチしたり、埋め込みマテリアルを受け入れたりすると、セキュリティに関する決定が要求者に渡されます。
安全な検証者は、トークンの外部で確立された発行者関係とネットワーク ポリシーを通じてキーを取得します。 ToolAcre はヘッダー URL を取得したり、埋め込みキーから信頼を構築したりしません。レビュー中にこれらのフィールドのいずれかが表示されることは、ヘッダーに従うための指示ではなく、ベリファイア構成を検査するためのプロンプトです。
crit — 検証者が理解するか拒否する必要がある拡張機能
`crit` は、特定の拡張機能について受信者が理解する必要があることを示します。このような拡張機能をサポートする検証ツールには、未知の重要な名前に対する明示的な実装と拒否パスが必要です。馴染みのない重要なマーカーを無視すると、プロデューサーとコンシューマーが保護されたコンテンツを異なる解釈をする可能性があります。
デコード専用実装は `crit` を処理しないため、互換性を主張せずに生の配列を表示できます。これは、検査と検証の間のもう 1 つの境界です。実稼働トークンが重要な拡張機能に依存している場合は、読み取り可能な JSON からのサポートを推測するのではなく、実際のライブラリと構成で動作を確認してください。
実用的な例 - 実際のヘッダーを読み取り、どのフィールドが検証に情報を提供し、どのフィールドが単なる情報であるかを判断します
`{"alg":"RS256","typ":"JWT","kid":"rotate-7"}` を検討してください。 ToolAcre は 3 つのフィールドすべてを整形して表示し、RS256 検証には発行者の公開キーが必要であることを説明します。レビュー担当者は、宣言されたアルゴリズムとキー識別子を記録し、それらをサーバーの固定ポリシーおよび信頼できるキー セットと比較できます。
フィールドは調査に情報を提供しますが、独立して何も決定しません。サーバーが別のアルゴリズムのみを許可する場合、正しい発行者セットで `rotate-7` が見つからない場合、または署名を拒否した場合、読み取り可能なヘッダーはその結果をオーバーライドしません。同様に、有効な署名を再計算せずにヘッダー テキストを変更することも受け入れてはなりません。
要点: ヘッダーは権限ではなく入力です。ToolAcre JWT デコーダーはヘッダーを表示するので、それを読み取ることができます。検証者は何を信頼するかを独自に決定する必要があります
JWT ヘッダーを権限ではなく入力として扱います。その値は、構成によってすでに許可されている選択肢の中から選択したり、可能性のある回転の問題を特定したり、プロファイルの不一致を説明したりするのに役立ちます。独自のアルゴリズム、キー、URL、またはトークン タイプに対する信頼を確立できません。
ToolAcre を使用してテスト ヘッダーを読み取り、欠落している `alg`、`none`、または予期しない `typ` などの不審な値を明らかにします。次に、すべての結果的な決定に対して構成された検証ツールに移動します。ヘッダーがどれほど妥当に見えるかに関係なく、デコードは信頼性、完全性、認可、または発行者の身元を証明するものではありません。