jwt
差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| jwt [2022/04/21 10:57] – 作成 nullpon | jwt [2024/07/15 11:13] (現在) – nullpon | ||
|---|---|---|---|
| 行 2: | 行 2: | ||
| # JWT | # JWT | ||
| - | JWT(Json Web Token)は、JSONペイロードに対して署名・暗号化を施す方法を定めたプロトコル、またはそのデータ。 | + | JWT(Json Web Token)は、URLセーフなデータ転送プロトコル、またはそのデータ。 |
| - | 主にOpenIDによる認証情報の送受信に利用されるが、任意のデータの送受信に使うことも可能。 | + | * [RFC 7519: JSON Web Token (JWT)](https:// |
| - | ## 構造 | + | 主にOpenIDによる認証情報、OAuth2のアクセストークンの送受信に利用されるが、任意のデータの送受信に使うことも可能である |
| - | ``` | ||
| - | eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg | ||
| - | ``` | ||
| - | BASE64エンコードされたデータをドットで結合したもの。内容は | + | ## JWTのデータ |
| - | ``` | + | ### トークン |
| - | ヘッダ.ペイロード.署名 | + | |
| - | ``` | + | |
| - | となっている | + | JWTはJSON形式で表現されるデータである。JWTの文脈でJSONオブジェクトをトークンと呼ぶ、 |
| - | ## ペイロード | + | ### クレーム |
| - | JSON形式のデータ本体。 | + | トークンの各データをクレームと呼ぶ。 |
| - | ### 標準データフィールド | + | クレームには任意のキーを使用できるが、以下の特別なフィールドが仕様で定義されている。 |
| - | + | ||
| - | 以下の7つのフィールドが標準で定義されている。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするなど、各種ライブラリでサポートされているケースが多い。 | + | |
| |フィールド名|内容| | |フィールド名|内容| | ||
| 行 38: | 行 31: | ||
| |jti|JWT ID、トークンごとに一意なID| | |jti|JWT ID、トークンごとに一意なID| | ||
| - | これらは必須ではなく、JWTには任意のデータを載せることができる | + | これらの値はいずれも必須ではないがライブラリでサポートされていることが多い。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするといった処理がライブラリ側で行われる。 |
| - | ## 署名 | + | ## JOSE |
| + | |||
| + | 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形式で以下の情報を格納する | ||
| + | |||
| + | |フィールド名|内容| | ||
| + | |---|---| | ||
| + | |typ|Type、タイプ、ほとんどの場合`JWT`なので大体省略される| | ||
| + | |cty|Content Type、データ形式、これもほぼ`JWT`なので省略されがち| | ||
| + | |alg|Algorithm、署名アルゴリズム| | ||
| + | |kid|公開鍵署名の場合、このJWTを署名した公開鍵のID| | ||
| + | |||
| + | |||
| + | ### 署名 | ||
| + | |||
| + | HMAC、RSA署名、ECDSA署名が利用可能。 | ||
| + | |||
| + | ``` | ||
| + | | ||
| + | | " | ||
| + | | Value | Algorithm | ||
| + | | ||
| + | | HS256 | HMAC using SHA-256 | ||
| + | | HS384 | HMAC using SHA-384 | ||
| + | | HS512 | HMAC using SHA-512 | ||
| + | | RS256 | RSASSA-PKCS1-v1_5 using | Recommended | ||
| + | | ||
| + | | RS384 | RSASSA-PKCS1-v1_5 using | Optional | ||
| + | | ||
| + | | RS512 | RSASSA-PKCS1-v1_5 using | Optional | ||
| + | | ||
| + | | 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 | ||
| + | | ||
| + | | PS384 | RSASSA-PSS using SHA-384 and | Optional | ||
| + | | ||
| + | | PS512 | RSASSA-PSS using SHA-512 and | Optional | ||
| + | | ||
| + | | none | No digital signature or MAC | Optional | ||
| + | | ||
| + | | ||
| + | ``` | ||
| - | ### アルゴリズム | + | `none`は署名なし。現在、最もよく使われているのは `RS256`、HMACは受け手と利用者が同じ場合に使うと良い(cookieの値に署名をつけたい場合など) |
| - | HMAC(事前共有鍵を用いたハッシュ値の突き合わせ)、RSA署名、ECDSA署名が利用可能。 | + | ## JWE |
| + | JWT暗号化の仕様はRFC7516 JWEで定義されている。 | ||
| </ | </ | ||
jwt.1650538656.txt.gz · 最終更新: by nullpon