Using OAuth 2.0
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

JSON Web トークン (JWT)

JSON Web Token (JWT) はエンコードされたデータを表します。 コンパクトで自己完結型、そして安全です。 JSON Web トークンには主に 2 つの種類があります。

  • 暗号化された JWT: トークンの機密性が確保され、意図した受信者だけがその内容を読み取ることができます。
  • 署名された JWT: トークンの整合性が保証され、受信者はトークンが変更されていないことを確認できます。
機能署名されたJWT暗号化されたJWT
完全性はいはい
秘密保持いいえはい
目的トークンが改ざんされていないことを確認し、送信者の身元を確認します。意図した受信者だけがトークンを読み取れるようにする

JWT にはクレームが含まれます。 暗号化された JWT の場合、クレームは非表示になります。 署名された JWT の場合は、クレームの整合性を検証できます。 Liferay は署名された JWT を使用して送信者の ID を確認します。 クライアントが JWT に署名する方法は 2 つあります。

  • 対称キー (共有シークレット): 対称キー署名では、必要な当事者間でクライアント シークレットを共有します。 共有シークレットを使用して JWT に署名すると、認可サーバーによって検証されます。 有効な場合、認可サーバーはアクセス トークンを発行します。
  • 非対称キー (公開キー/秘密キーのペア): 非対称キー署名では、秘密キーを使用して JWT に署名します。 サーバーは署名を検証するための公開鍵を保持します。 有効な場合、認可サーバーはアクセス トークンを発行します。

JWT構造

JWT には、ヘッダー、ペイロード、署名の 3 つの部分が含まれており、ドット (.) で区切られています。)。

JOSE (JSON Object Signing and Encryption) ヘッダーとも呼ばれ、使用されるハッシュ アルゴリズム、JWT のタイプ、場合によってはキー ID (kid) を宣言するキーと値のペアが含まれます。

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

ペイロード

ペイロードには、エンティティ (通常はユーザー) に関する属性が含まれます。 これらの属性は一般にクレームと呼ばれます。

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

署名

署名は送信者を識別します。 JWT に小さな変更を加えると、署名が無効になります。 署名を取得するには、ヘッダーとペイロードを Base64 でエンコードし、共有秘密キーまたは秘密キーを使用したハッシュ アルゴリズムを使用して署名します。 その後、再度 Base64 でエンコードされます。

一部オリジナルBase64エンコード
ヘッダ{"alg":"HS256","typ":"JWT"}eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
ペイロード{"sub":"1234567890","name":"John Doe","iat":1516239022}eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
署名Base64(エンコードされたヘッダー & ペイロードは共有秘密鍵または秘密鍵を使用して署名されます)eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

共有秘密の場合、アルゴリズムは対称 (HS256) である必要があり、秘密鍵の場合、アルゴリズムは非対称 (RS256) である必要があります。

JWTの形成

ヘッダーとペイロードはBase64でエンコードされ、ドット(.)で区切られます。)。 署名値はBase64でエンコードされ、ペイロードの後に(.で区切られて追加されます。)。

これら 3 つを組み合わせると、サンプル JWT が生成されます。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWTを使用する理由

  • JWT にはエンティティに関する必要な情報がすべて含まれているため、サーバーはセッション データを保存する必要はありません。 これにより、システムはステートレスかつスケーラブルになります。
  • 通常のアクセス トークンでは、多くの場合、サーバーがトークンを保存し、有効期限をチェックする必要があります。 これにより、API 呼び出しとデータベース検索の回数が増加し、JWT と比較して効率が低下します。
  • JWT は業界標準に準拠しており、異なるシステム間での導入が容易です。 通常のアクセス トークンでは独自の形式が使用される場合があります。