Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

これはAIが翻訳した投稿です。

Seize the day

JWT(JSON Web Token)とは?

言語を選択

  • 日本語
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AIが要約した文章

  • JSON Web Token(JWT)は、情報を安全に送信するための暗号化されたトークンです。
  • JWTは、ヘッダー、ペイロード、署名で構成され、署名によりデータの完全性が保証されます。
  • JWTは、状態情報を別途管理する必要がないため、分散環境で拡張性が高いです。

JWTとは?

JSON Web Token (JWT) は、JSON オブジェクトを使用して情報を安全に送信する方法の一種であり、公開された標準 (RFC 7519) です。文字通り、必要な情報をトークンに詰め込み、暗号化して使用します。


JWT は、署名されたトークン (signed token) であると強調されています。公開鍵/秘密鍵のペアを使用して署名する場合、この署名は秘密鍵を保持している当事者のみがそのトークンに署名したことを保証します。つまり、鍵を保持しているサーバーはこのトークンが正規のものであるかどうかを知ることができます。


JWT 構造

JWT は、ヘッダー (Header)、ペイロード (Payload)、署名 (Signature) で構成されています。

各部分は Base64 でエンコードされ、点 (.) を区切り文字として使用します。

ヘッダー

{
    "alg": "HS256",
    "typ": "JWT"

ヘッダーには、トークンのタイプ (typ) と使用されている署名アルゴリズム (alg) の 2 つの主要な情報が含まれています。署名アルゴリズムは、署名を作成および検証する際に使用されます。

typ は "JWT" に設定され、alg は HMAC、SHA256 などのように記述されます。上記の例では、秘密鍵で HS256 アルゴリズムを使用することを意味します。

ペイロード

{
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022


ペイロードには、トークンに渡す Claim が含まれています。ユーザー識別情報またはトークンのプロパティをキーと値の形式で保存します。つまり、開発者は自由に挿入できます!

標準仕様では、キーの名前はコンパクトに 3 文字で定義されています。

登録された Claim は次のとおりです。

  • iss (Issuer) : トークンの発行者 (トークンの発行者の固有識別情報を含む)
  • sub (Subject) : トークンの対象となる主体
  • aud (Audience) : トークンの受信者
  • exp (Expiration Time) : トークンの有効期限 (この時間が過ぎると有効ではなくなります)
  • nbf (Not Before) : トークンの有効化日時 (この時間まではトークンを使用できません)
  • iat (Issued At) : トークンの発行日時
  • jti (JWT Id) : JWT トークンの識別子 (発行者が複数の場合、これらを区別するための値)


それ以外の値の中で必要な値がある場合は、追加して使用しても問題ありません。

ただし、ペイロードは暗号化されていない署名された値ではないため、機密情報を格納しません。

デコードすると、誰でも閲覧できます。jwt.io サイトでもすぐに確認できます。

署名

HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    your-256-bit-secret

ヘッダーとペイロードを Base64 でエンコードした値を区切り文字の点 (.) で連結し、サーバーが保持している秘密鍵 your-256-bit-secret を使用して署名します。

そのため、署名 (Signature) は、トークンを発行したサーバーのみが秘密鍵を使用して復号化できます。

復号化を考えてみると、秘密鍵を使用して署名を復号化し、base64UrlEncode(header) が JWT のヘッダー値と一致するかどうか、base64UrlEncode(payload) が一致するかどうかを確認することでわかります。

署名を除くヘッダーとペイロードはエンコードされているだけであり、本文の情報を確認できますが、署名によって情報の整合性とセキュリティが維持されます。



JWT は、必要なすべての情報を自己完結型として保持しており、ステートフルである必要があるセッションの欠点を補うために作成された JWT は、別々のストレージは必須ではありません。

サーバー側でセッションを維持する必要がないため、ステートレスであり、分散システムやマイクロサービスアーキテクチャにおける拡張性が高くなります。

署名、デジタル署名によって保護され、データの整合性を保証できます。

nofunfromdev
Seize the day
Seize the day
nofunfromdev
[Effective Java] アイテム 1. 静的ファクトリメソッドをコンストラクタよりも優先する 静的ファクトリメソッドは、コンストラクタの代わりにインスタンスを作成する柔軟で効率的な方法です。 名前を付けることができ、特定の条件に合致するインスタンスを返したり、キャッシュを使ってパフォーマンスを向上させることができます。 シングルトンパターンとは異なり、複数のタイプのインスタンスを作成して返したり、リフレクションを使わずに柔軟性を維持することができます。
제이온
제이온
제이온
제이온

2024年4月27日

有料の共通認証書ではなく、無料の金融認証書を使おう! 共通認証書の代わりに、無料で発行できる金融認証書を紹介します。3分で発行して3年間使用できるので便利です。銀行のホームページで 申請でき、ホーム税、国民年金、保険会社などで利用できます。共通認証書の更新費用も削減できる金融認証書、乗り換える時期です。
길리
길리
길리
길리
길리

2024年4月17日

[Effective Java] アイテム6. 不要なオブジェクト生成を避ける Javaで不要なオブジェクト生成を減らす方法に関するガイドです。String、Booleanなどの不変オブジェクトはリテラルを使用し、正規 表現はPatternインスタンスをキャッシュするのが最適です。また、オートボクシングはパフォーマンスの低下を引き起こす可能性があるため、基本型を使用するのが 最適です。 詳細は「Effective Java」を参照してください。
제이온
제이온
제이온
제이온

2024年4月28日

Rustが並行性バグを防ぐ方法 Rustは、並行プログラミングの課題を解決する強力な言語です。 型システムと所有権モデルにより、スレッド間のデータの受け渡しと共有が安全になります。 Mutex、Channel、Atomicなどの内部可変性パターンを通じて、共有変数を定義し、安全に使用することができます。 Rustは並行性問題を積極的に解決し、大規模システム開発に広く活用されています。
곽경직
곽경직
곽경직
곽경직
곽경직

2024年3月28日

Rust入門ガイド Rust初心者のためのガイドを紹介します。公式ドキュメントから始め、「hello world」コードを実行する方法を習得します。 Rustの基本概念である変数、制御構造などを確認します。
곽경직
곽경직
곽경직
곽경직
곽경직

2024年3月30日

概念的データモデリング 概念的データモデリングは、エンティティを分離し、エンティティ間の関係をERDで表現するプロセスです。エンティティは独立した情報単位であり、属性は エンティティが持つデータです。識別子はエンティティを一意に識別し、関係はエンティティ間の相互作用を表します。カーディナリティはエンティティ間の数値的 関係、オプション性はデータの必須性を示します。
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024年4月8日