ユーザ用ツール

サイト用ツール


jwt

Warning: Undefined array key "cell_counter" in /var/www/sites/wiki.nullpon.moe/htdocs/inc/parser/xhtml.php on line 1538

JWT

JWT(Json Web Token)は、JSONペイロードに対して署名・暗号化を施す方法を定めたプロトコル、またはそのデータ。

主にOpenIDによる認証情報の送受信に利用されるが、任意のデータの送受信に使うことも可能。

構造

eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg

BASE64エンコードされたデータをドットで結合したもの。内容は

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

となっている。ヘッダ、ペイロードはJSON文字列を、署名はバイナリをBASE64エンコードしたものである。この形式では暗号化されていないのでデータは保護されない。

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

ペイロード

送受信されるデータ本体のこと

トークン

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

クレーム

JSONのkey value形式で表現される各データをクレームと呼ぶ。

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

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

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

ヘッダ

ヘッダは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の値に署名をつけたい場合など)

jwt.txt · 最終更新: 2024/01/16 08:24 by nullpon