無料JWTデコーダー

JSON Web Tokenをデコードして内容を確認 · ヘッダー、ペイロード、クレーム、有効期限。

ヘッダー


      

ペイロード


      

署名


      

JWTについて

JSON Web Token(JWT)は、二者間でクレームをやり取りするためのコンパクトな形式です。ヘッダー(アルゴリズムとタイプ)、ペイロード(発行者、有効期限、サブジェクトなどのクレーム)、署名の3つの部分から構成されます。このツールはヘッダーとペイロードをデコードしますが、署名の検証は行いません · 検証には署名用のシークレットまたは公開鍵が必要です。デコードはすべてブラウザ内で行われ、トークンが外部に送信されることはありません。

JSON Web Token の簡単な歴史

JSON Web Token(JWT)は 2015年5月Michael B. Jones(Microsoft)John Bradley(Ping Identity)Nat Sakimura(NRI)によって IETF の JOSE ワーキンググループのもとで RFC 7519 として標準化されました。これは半世代の作業の集大成でした:最初の JWT インターネットドラフトは 2010年12月に登場し、SAML 2.0(2005)の重い XML ベースのアサーション形式と、ブラウザがネイティブに解析できるもっと軽量なものへの感じられたニーズから生まれました。突破口は XML より JSON を、PEM より base64url を選んだことでした:JWT は URL クエリ文字列や Authorization: Bearer ヘッダーに収まりました。JOSE ファミリー全体は調整されたセットとして出荷されました:署名のための RFC 7515(JWS)、暗号化のための RFC 7516(JWE)、鍵フォーマットのための RFC 7517(JWK)、アルゴリズム識別子のための RFC 7518(JWA)、クレーム層のための RFC 7519(JWT)、すべて 2015 年 5 月の同じ日に。採用は瞬時でした。OAuth 2.0(RFC 6749、2012)はアクセストークンを標準化していましたが、その形式を不透明のままにしていました;業界は JWT を選びました。OpenID Connect(2014年12月、OpenID Foundation)は ID トークンに JWT を必須としました。2017 年までに、すべての主要なアイデンティティプロバイダー(Auth0OktaAzure ADAWS CognitoGoogle IdentityFirebase Auth)はネイティブのセッション形式として JWT を発行していました。JWT.io、Auth0 が 2014 年にローンチしたデコーダーウェブサイトは、事実上の JWT デバッグツールとなり、開発者のマインドシェアにおいてフォーマットを定着させるのに役立ちました。2 つのセキュリティインシデントが現代の脅威モデルを形作りました:Tim McLean の 2015 年の開示による alg: none バイパスと HS/RS アルゴリズム混乱攻撃、そして CVE-2022-21449(2022年4月)、Neil Madden による Java 15-18 の ECDSA 検証ツールの「Psychic Signatures」バグ。両方ともライブラリのデフォルトの強化につながりました:ほとんどの現代のライブラリは現在、alg: none を即座に拒否し、トークンのヘッダーから読み取るのではなく期待されるアルゴリズムをピン留めします。

JWT の構造

実際の JWT の使用場所

標準とセキュリティのマイルストーン

その他のよくある質問

なぜこのツールは署名を検証しないのですか?

検証にはシークレット(HMAC)または公開鍵(RSA / ECDSA / EdDSA)が必要です。本番の HMAC シークレットを任意のウェブサイトに貼り付けることは、それ自体が資格情報の漏洩です。何も送信しないと誓うツールでさえも。検証はあなたが制御するサーバーに属します。デコーダーの仕事は、内容を読みやすくして、検証者が確認すべきものを見ることができるようにすることです。

ここに実際の本番トークンを貼り付けるのは安全ですか?

デコードは完全にあなたのブラウザで行われます。トークンはネットワーク経由で送信されず、ログに書き込まれず、どこにも保存されません。とは言え、JWT はしばしば資格情報です:期限切れでないアクセストークンを持っている人は誰でもユーザーとして行動できます。コミュニティの慣例は「本番 JWT をセッションクッキーのように扱う」です:可能なときはテストトークンを優先し、それを発行したブラウザセッションの外で共有した実際のトークンをローテーションします。

ブラウザでどこに JWT を保存すべきですか?

2 つの一般的なパターンにはそれぞれトレードオフがあります。localStorage は便利ですが、ページでの成功した XSS 攻撃によって読み取り可能です。HttpOnly 付きのクッキーは JavaScript から見えないので XSS は読み取れませんが、CSRF を回避するために SameSite=Strict または SameSite=Lax が必要です。現在のベストプラクティス:JavaScript 変数(メモリのみ)の短命のアクセストークンと、リフレッシュエンドポイントにスコープされた HttpOnly + Secure + SameSite=Strict クッキー内の長命のリフレッシュトークン、使用ごとにローテーション。

ヘッダーの kid フィールドは何をしますか?

それはどの鍵がトークンに署名したかを識別します。現代のアイデンティティプロバイダーは、/.well-known/jwks.json エンドポイントで公開鍵を JWK Set(RFC 7517)として公開します;検証者は kid がトークンのヘッダーと一致する鍵を検索します。これがダウンタイムゼロの鍵ローテーションを可能にするものです:古い鍵と新しい鍵の両方が猶予期間中に JWKS に存在できます。

発行された JWT を取り消すことはできますか?

ネイティブにはできません。署名された JWT はその exp クレームまで有効です;そのステートレス性がフォーマットの目玉のプロパティです。回避策:取り消し可能なリフレッシュトークンと組み合わせてアクセストークンを短く保つ(5-15 分);取り消された jti 値のサーバー側拒否リストを維持する;署名鍵をローテーションする(これはそれで署名されたすべての未処理のトークンを無効にします)。各オプションはいくつかの状態を再導入します;それがトレードです。

トークンをデコードすることはそれを復号することと同じですか?

いいえ。デコードは base64url を JSON に戻します:誰でもできます、それがポイントです。復号には鍵が必要で、JSON Web Encryption(JWE、RFC 7516)にのみ適用されます。これは JOSE ファミリーの暗号化されたバリアントです。野生で見るほとんどのトークンは JWS(署名されているが暗号化されていない)なので、デコードはそれらを読むのに十分です。

関連ツール