CoderTools

JWTエンコーダ/デコーダ

JWTトークンを安全にデコード、検証、生成

デコードされたJWT

ヘッダー


                        

ペイロード


                        

署名


                        

JSON Web Token (JWT) 完全ガイド

JWT (JSON Web Token) とは?

JSON Web Token (JWT) は、オープン標準 (RFC 7519) であり、当事者間で情報をJSONオブジェクトとして安全に送信するためのコンパクトで自己完結型の方法を定義しています。この情報はデジタル署名されているため、検証して信頼することができます。JWTは、秘密鍵(HMACアルゴリズム)またはRSAやECDSAを使用する公開鍵/秘密鍵のペアを使用して署名できます。Base64Urlエンコードを使用しているためサイズが小さく、URL、POSTパラメータ、またはHTTPヘッダー内で送信できます。

JWTの構造

JWTは技術的に、ドット (.) で区切られた3つの部分で構成されています。

xxxxx.yyyyy.zzzzz
  • ヘッダー (Header) : ヘッダーは通常、トークンのタイプ(JWT)と、HMAC SHA256やRSAなどの使用されている署名アルゴリズムの2つの部分で構成されます。
  • ペイロード (Payload) : ペイロードにはクレームが含まれます。クレームは、エンティティ(通常はユーザー)および追加データに関するステートメントです。クレームには、登録済み、パブリック、プライベートの3種類があります。
  • 署名 (Signature) : 署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、秘密鍵、ヘッダーで指定されたアルゴリズムを取得し、署名する必要があります。署名は、転送中にメッセージが変更されていないことを確認するために使用されます。

サポートされているアルゴリズム

このツールは、すべての標準アルゴリズムのデコードと検証、および対称アルゴリズムの生成をサポートしています。

  • HS256: HS256 (HMAC SHA-256): 対称鍵方式。共有秘密鍵が必要です。高速でマイクロサービスで一般的です。
  • HS384: HS384 (HMAC SHA-384): 対称鍵方式。より高い衝突耐性のために384ビットハッシュを使用します。
  • HS512: HS512 (HMAC SHA-512): 対称鍵方式。512ビットハッシュを使用。対称署名で最も安全です。
  • RS256: RS256 (RSA SHA-256): 非対称鍵方式。署名に秘密鍵、検証に公開鍵を使用。パブリックAPIに最適です。
  • RS384: RS384 (RSA SHA-384): 非対称鍵方式。RS256より強力なハッシュ。
  • RS512: RS512 (RSA SHA-512): 非対称鍵方式。RSA署名の中で最高のセキュリティ。

JWTクレームの理解

クレームは、サブジェクトに関する情報の断言です。標準的な登録済みクレームには以下が含まれます。

  • iss (Issuer): iss (Issuer): JWTの発行者を識別します。
  • sub (Subject): sub (Subject): JWTの主題であるプリンシパル(ユーザーIDなど)を識別します。
  • aud (Audience): aud (Audience): JWTが意図する受信者を識別します。
  • exp (Expiration Time): exp (Expiration Time): JWTが受け入れられなくなる有効期限を識別します。
  • nbf (Not Before): nbf (Not Before): JWTが受け入れられるようになる開始日時を識別します。
  • iat (Issued At): iat (Issued At): JWTが発行された日時を識別します。
  • jti (JWT ID): jti (JWT ID): JWTの一意の識別子を提供します。

いつJWTを使用すべきか?

  • 認可 (Authorization): 最も一般的なシナリオです。ユーザーがログインすると、その後の各リクエストにJWTが含まれ、ユーザーはそのトークンで許可されたルート、サービス、リソースにアクセスできます。
  • 情報交換: JWTは、当事者間で情報を安全に送信するための良い方法です。JWTは署名できるため、送信者が本人であることを確認できます。
  • ステートレスセッション: サーバーサイドセッションとは異なり、JWTには必要なすべてのユーザーデータが含まれているため、セッション検索のためのデータベース負荷が軽減されます。
  • クロスドメインSSO: JWTはステートレスでコンパクトなため、シングルサインオン(SSO)実装のために異なるドメイン間で簡単に送信できます。
  • APIセキュリティ: サーバーがセッション状態を維持しないRESTful APIの保護。

重要なセキュリティのベストプラクティス: 1. パスワードなどの機密データをペイロードに入れないでください。誰でも読み取れます(Base64デコード)。 2. 常に署名を確認してください。 3. 'exp'(有効期限)クレームを使用してトークンの寿命を制限してください。 4. トークンの傍受を防ぐためにHTTPSを使用してください。 5. トークンを安全に保存してください(XSS攻撃を防ぐために、LocalStorageよりもHttpOnly Cookieが推奨されます)。

参考文献

よくある質問 (FAQ)

JWTは暗号化されていますか、エンコードされていますか?

標準的なJWTはエンコードおよび署名されていますが、暗号化されてはいません。ペイロード内のデータはBase64Urlエンコードされており、誰でもデコードして読み取ることができます。署名はデータが改ざんされていないことを保証しますが、データを隠すわけではありません。データを隠すには、JWE (JSON Web Encryption) が必要です。

クライアントのどこにJWTを保存すべきですか?

Webアプリケーションの場合、`HttpOnly` CookieにJWTを保存することは、Cookieがクロスサイトスクリプティング(XSS)攻撃の影響を受けないため、一般的に`localStorage`よりも安全であると考えられています。ただし、CookieはCSRFに対して脆弱であり、別途対策が必要です。

JWTが盗まれたらどうなりますか?

JWTが盗まれた場合、攻撃者はトークンの有効期限が切れるまでユーザーになりすますことができます。そのため、短い有効期限 (`exp`) を使用し、トークン失効戦略(jtiのブラックリスト化など)や、ローテーション付きのリフレッシュトークンを実装することが重要です。

このツールは私の鍵をサーバーに送信しますか?

いいえ。このツールは完全にクライアントサイドで実行されます。秘密鍵、シークレットキー、トークンデータがブラウザの外に出ることはありません。すべての暗号化操作は、JavaScriptライブラリを使用してローカルで実行されます。

手動でペイロードを変更できますか?

ローカルでペイロード部分を変更することはできますが、そうすると元の鍵に基づく署名は無効になります。正しいシークレット/秘密鍵で再署名しない限り、サーバーはトークンを拒否します。

HS256とRS256の違いは何ですか?

HS256は対称アルゴリズム(署名と検証に1つの共有秘密鍵を使用)です。RS256は非対称アルゴリズム(署名に秘密鍵、検証に公開鍵を使用)です。RS256は、多くのサービスがトークンを検証する必要があるが生成してはならない分散システムに適しています。

クイックメニュー

最近のツールはありません