ユーザ用ツール

サイト用ツール


jwt

JWT

JWT(Json Web Token)は、URLセーフなデータ転送プロトコル、またはそのデータ。

主にOpenIDによる認証情報、OAuth2のアクセストークンの送受信に利用されるが、任意のデータの送受信に使うことも可能である

JWTのデータ

トークン

JWTはJSON形式で表現されるデータである。JWTの文脈でJSONオブジェクトをトークンと呼ぶ、

クレーム

トークンの各データをクレームと呼ぶ。

クレームには任意のキーを使用できるが、以下の特別なフィールドが仕様で定義されている。

フィールド名内容
issIssuer、トークン発行者
subSubject、トークン識別子、認証情報のユーザIDなどが該当
audAudience、トークンの受け取り手
expExpiration、有効期限、UNIX時間で指定
nbfNot Before、トークンが有効になる時刻、UNIX時間で指定
iatIssued At、トークンの発行時刻
jtiJWT ID、トークンごとに一意なID

これらの値はいずれも必須ではないがライブラリでサポートされていることが多い。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするといった処理がライブラリ側で行われる。

JOSE

Javascript Object Signing and Encryption の略。JWTの署名、暗号化を行う仕組みである

JWS

JWS(JSON Web Signiture)はJWTデータに署名を追加する仕組み、または、そのデータ形式。一般的にJWTと呼ばれた場合これを指すことが多い。

以下のJWSはCompact形式と呼ばれるフォーマットである。これ以外のフォーマットはあまり使われない。

eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg

BASE64エンコードされたデータをドットで結合したもので以下のような構造になっている

ヘッダ.ペイロード.署名

ペイロード

JWTのデータ本体

ヘッダ

JOSE Headerと呼ばれる。ヘッダはJSON形式で以下の情報を格納する

フィールド名内容
typType、タイプ、ほとんどの場合JWTなので大体省略される
ctyContent Type、データ形式、これもほぼJWTなので省略されがち
algAlgorithm、署名アルゴリズム
kid公開鍵署名の場合、このJWTを署名した公開鍵のID

署名

HMAC、RSA署名、ECDSA署名が利用可能。

   +--------------+-------------------------------+--------------------+
   | "alg" Param  | Digital Signature or MAC      | Implementation     |
   | Value        | Algorithm                     | Requirements       |
   +--------------+-------------------------------+--------------------+
   | HS256        | HMAC using SHA-256            | Required           |
   | HS384        | HMAC using SHA-384            | Optional           |
   | HS512        | HMAC using SHA-512            | Optional           |
   | RS256        | RSASSA-PKCS1-v1_5 using       | Recommended        |
   |              | SHA-256                       |                    |
   | RS384        | RSASSA-PKCS1-v1_5 using       | Optional           |
   |              | SHA-384                       |                    |
   | RS512        | RSASSA-PKCS1-v1_5 using       | Optional           |
   |              | SHA-512                       |                    |
   | ES256        | ECDSA using P-256 and SHA-256 | Recommended+       |
   | ES384        | ECDSA using P-384 and SHA-384 | Optional           |
   | ES512        | ECDSA using P-521 and SHA-512 | Optional           |
   | PS256        | RSASSA-PSS using SHA-256 and  | Optional           |
   |              | MGF1 with SHA-256             |                    |
   | PS384        | RSASSA-PSS using SHA-384 and  | Optional           |
   |              | MGF1 with SHA-384             |                    |
   | PS512        | RSASSA-PSS using SHA-512 and  | Optional           |
   |              | MGF1 with SHA-512             |                    |
   | none         | No digital signature or MAC   | Optional           |
   |              | performed                     |                    |
   +--------------+-------------------------------+--------------------+

noneは署名なし。現在、最もよく使われているのは RS256、HMACは受け手と利用者が同じ場合に使うと良い(cookieの値に署名をつけたい場合など)

JWE

JWT暗号化の仕様はRFC7516 JWEで定義されている。

jwt.txt · 最終更新: 2024/07/15 11:13 by nullpon