jwt
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
jwt [2022/04/21 17:14] – nullpon | jwt [2024/07/15 11:13] (現在) – nullpon | ||
---|---|---|---|
行 2: | 行 2: | ||
# JWT | # JWT | ||
- | JWT(Json Web Token)は、JSONペイロードに対して署名・暗号化を施す方法を定めたプロトコル、またはそのデータ。 | + | JWT(Json Web Token)は、URLセーフなデータ転送プロトコル、またはそのデータ。 |
* [RFC 7519: JSON Web Token (JWT)](https:// | * [RFC 7519: JSON Web Token (JWT)](https:// | ||
- | 主にOpenIDによる認証情報の送受信に利用されるが、任意のデータの送受信に使うことも可能。 | + | 主にOpenIDによる認証情報、OAuth2のアクセストークンの送受信に利用されるが、任意のデータの送受信に使うことも可能である |
- | ## 構造 | ||
- | ``` | + | ## JWTのデータ |
- | eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg | + | |
- | ``` | + | |
- | + | ||
- | BASE64エンコードされたデータをドットで結合したもの。内容は | + | |
- | + | ||
- | ``` | + | |
- | ヘッダ.ペイロード.署名 | + | |
- | ``` | + | |
- | + | ||
- | となっている。ヘッダ、ペイロードはJSON文字列をBASE64エンコードしたものである。この形式では暗号化されていないのでデータは保護されない。 | + | |
- | + | ||
- | JWT暗号化の仕様は[RFC7516 JWE](https:// | + | |
- | + | ||
- | ## ペイロード | + | |
- | + | ||
- | 送受信されるデータ本体のこと | + | |
### トークン | ### トークン | ||
- | データはJSONオブジェクトで表現される。JWTの文脈ではこのデータを表現するJSONオブジェクトをトークンと呼ぶ、 | + | JWTはJSON形式で表現されるデータである。JWTの文脈でJSONオブジェクトをトークンと呼ぶ、 |
### クレーム | ### クレーム | ||
- | JSONのkey value形式で表現される各データをクレームと呼ぶ。 | + | トークンの各データをクレームと呼ぶ。 |
クレームには任意のキーを使用できるが、以下の特別なフィールドが仕様で定義されている。 | クレームには任意のキーを使用できるが、以下の特別なフィールドが仕様で定義されている。 | ||
行 50: | 行 33: | ||
これらの値はいずれも必須ではないがライブラリでサポートされていることが多い。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするといった処理がライブラリ側で行われる。 | これらの値はいずれも必須ではないがライブラリでサポートされていることが多い。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするといった処理がライブラリ側で行われる。 | ||
- | ## ヘッダ | + | ## JOSE |
- | ヘッダはJSON形式で以下の情報を格納する | + | Javascript Object Signing and Encryption の略。JWTの署名、暗号化を行う仕組みである |
+ | |||
+ | |||
+ | |||
+ | ## JWS | ||
+ | |||
+ | * [RFC7515 JSON Web Signature (JWS)](https:// | ||
+ | * [RFC7518 JSON Web Algorithms (JWS)](https:// | ||
+ | |||
+ | |||
+ | JWS(JSON Web Signiture)はJWTデータに署名を追加する仕組み、または、そのデータ形式。一般的にJWTと呼ばれた場合これを指すことが多い。 | ||
+ | |||
+ | |||
+ | 以下のJWSはCompact形式と呼ばれるフォーマットである。これ以外のフォーマットはあまり使われない。 | ||
+ | |||
+ | ``` | ||
+ | eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg | ||
+ | ``` | ||
+ | |||
+ | BASE64エンコードされたデータをドットで結合したもので以下のような構造になっている | ||
+ | |||
+ | ``` | ||
+ | ヘッダ.ペイロード.署名 | ||
+ | ``` | ||
+ | |||
+ | ### ペイロード | ||
+ | |||
+ | JWTのデータ本体 | ||
+ | |||
+ | ### ヘッダ | ||
+ | |||
+ | JOSE Headerと呼ばれる。ヘッダはJSON形式で以下の情報を格納する | ||
|フィールド名|内容| | |フィールド名|内容| | ||
行 59: | 行 73: | ||
|cty|Content Type、データ形式、これもほぼ`JWT`なので省略されがち| | |cty|Content Type、データ形式、これもほぼ`JWT`なので省略されがち| | ||
|alg|Algorithm、署名アルゴリズム| | |alg|Algorithm、署名アルゴリズム| | ||
+ | |kid|公開鍵署名の場合、このJWTを署名した公開鍵のID| | ||
- | ## 署名 | + | ### 署名 |
- | + | ||
- | * [RFC7515 JSON Web Signature (JWS)](https:// | + | |
- | * [RFC7518 JSON Web Algorithms (JWS)](https:// | + | |
- | + | ||
- | ### アルゴリズム | + | |
HMAC、RSA署名、ECDSA署名が利用可能。 | HMAC、RSA署名、ECDSA署名が利用可能。 | ||
行 98: | 行 108: | ||
``` | ``` | ||
- | 現在、最もよく使われているのは `RS256`、`none`は使うべきではない | + | `none`は署名なし。現在、最もよく使われているのは `RS256`、HMACは受け手と利用者が同じ場合に使うと良い(cookieの値に署名をつけたい場合など) |
+ | |||
+ | ## JWE | ||
+ | |||
+ | JWT暗号化の仕様はRFC7516 JWEで定義されている。 | ||
</ | </ |
jwt.1650561270.txt.gz · 最終更新: 2022/04/21 17:14 by nullpon