開発者ツール · JWT デコーダー
登録された 7 つの JWT クレーム: iss、sub、aud、exp、nbf、iat、および jti
· 背景
jwt データ形式 認証
RFC 7519 は、定義された意味とタイプを持つ 7 つのクレーム名を予約しています。この投稿では、それぞれの型、その背後にある StringOrURI 型と NumericDate 型、および登録済みクレーム、パブリック クレーム、プライベート クレームがどのように共存するかについて説明します。
どのクレーム名を使用すればよいですか? — レジストリが答える設計上の質問
クレーム名の選択は、相互運用性の決定の一部です。登録名を再利用すると、リーダーとライブラリに確立された意味が与えられますが、アプリケーション固有の名前にはローカルのドキュメントが必要です。 ToolAcre は説明テーブル内の 7 つのコア名を認識し、セマンティクスを割り当てずに他のクレームを表示したままにします。
馴染みのある名前は、自動的には信頼されません。デコーダは、トークンに含まれるオブジェクトを読み取りますが、その署名を検証することはありません。登録された語彙は、人間がデータを分類するのに役立ちます。信頼された検証者のみが、発行者が保護された値を提供したことを証明できます。
iss と sub は文字列として表示されます。この実装では StringOrURI 構文は強制されません
`iss` は、トークンの発行者が誰であるかを識別し、 `sub` は、誰について、または何に関するものであるかを識別します。 ToolAcre は両方を記述し、その値を表示しますが、その実装では StringOrURI 文法を検証したり、どちらかのフィールドをサービス構成と比較したりすることはありません。
検証者は、期待される発行者を信頼できる鍵マテリアルにバインドし、その発行者の名前空間でサブジェクトを解釈する必要があります。既知の発行者文字列を捏造されたペイロードにコピーすると、発信元を確立することなくデコーダが説得力のあるものに見えます。これらのフィールドは、暗号化検証後にのみ使用してください。
aud — 文字列または配列としての対象受信者
`aud` は、対象となる受信者を記述し、適用可能なトークン ルールに基づいて 1 つの値またはリストとして表すことができます。 ToolAcre の汎用クレーム テーブルは、配列を JSON テキストとして保存しますが、現在のサービスがそこに表示されるかどうかは決定しません。
聴衆は状況に応じて決まります。同じ認証済みトークンが、ある API には適切でも、別の API には不適切である可能性があります。リソース サーバーには、信頼された構成で予期される識別子が必要であり、不一致を受け入れるべき場所をトークンに定義させるのではなく、不一致を拒否する必要があります。
exp、nbf、iat — トークンを時間内にバインドする 3 つの NumericDate クレーム
`exp`、`nbf`、および `iat` は NumericDate クレームです。 ToolAcre は有限数値をエポックからの秒数として扱い、日付表示には 1,000 を乗算し、ブラウザーの時計を基準にして有効期限または以前にラベルを付けます。許容範囲を定義したり、サーバーの受け入れを強制したりするものではありません。
有効期限は、トークンがかつて有効であったことを証明するものではなく、要求された終了境界をマークします。 Not-before は要求された開始境界をマークし、issued-at は要求された作成時刻を記録します。それぞれがペイロード内で偽造される可能性があるため、時間計算は信頼できるフローでの署名検証に従う必要があります。
jti — リプレイ検出および拒否リスト用の一意の識別子
`jti` はトークン識別子です。システムは、認証され、適切に生成された識別子をリプレイ追跡または取り消し状態に使用できますが、クレームだけではどちらのプロパティも提供しません。 ToolAcre は、これをリプレイ検出用のトークン ID として記述し、その正確な値を表示します。
一意性、ストレージ、および検索動作は、発行者と検証者のアーキテクチャに属します。デコーダは、別のトークンがその識別子を再利用したかどうか、または拒否リストにその識別子が含まれているかどうかを判断できません。周囲の信頼できるシステムが証拠を提供するまで、これを相関値の候補として扱います。
ToolAcre 表示に登録された説明とアプリケーション固有のクレーム
この実装では、説明テキストによってのみ登録名を区別します。すべてのペイロード プロパティは引き続き `listClaims` によって返されます。不明な名前には null の説明が与えられ、UI によってアプリケーション固有のラベルが付けられます。パブリック レジストリを参照したり、プライベート名の衝突を防止したりすることはありません。
その境界により、情報源が証明している以上の主張が避けられます。相互運用性が重要な場合、チームはプライベートな主張を文書化し、衝突耐性のある名前を選択する必要があります。デコーダーに説明がないということは、「このローカルの 7 つの名前のテーブルにない」ということを意味するものであり、「無効」または「無視しても安全」ということではありません。
作業例 — 現実的なペイロードを読み取り、各クレームを分類する
`{"iss":"https://issuer.example","sub":"user-7","aud":["orders"],"exp":1717246800,"nbf":1717243100,"iat":1717243200,"jti":"demo-9","tenant":"north"}` を検討してください。 ToolAcre は、3 つの数値時間をフォーマットしながら、アプリケーション固有の 7 つの登録フィールドとラベル `tenant` を記述します。
この分類は、ペイロード設計のレビューに役立ちます。 URL、件名、対象者、日付、識別子、またはテナントは認証されません。偽造されたトークンはオブジェクトを正確に再現できます。検証済みのクレームのみを認可ロジックにフィードし、使用するサービスの期待値を適用します。
要点: 適合する場合は登録名を使用します。ToolAcre JWT デコーダーはペイロードを表示するため、実際の発行者がどのクレームを設定しているかを確認できます。
認識可能な語彙により不必要な翻訳が削減されるため、定義された意味が適合する場合は登録名を使用してください。プライベートフィールドは文書化して最小限にとどめてください。単にダウンストリーム コードがそのキーをすでに解析しているという理由だけで、`sub`、`aud`、または別のローカルな意味を持つ時間クレームをオーバーロードしないでください。
ToolAcre は、安全なトークンに含まれる名前と、その数値クレームがどのように表示されるかを表示できます。いかなる値も保証することはできません。デコードの有益な結果は、レビューのための目録になります。検証とポリシーの有益な結果は決定であり、それらは分離されたままです。