ユーザ用ツール

サイト用ツール


jwt

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
jwt [2022/04/21 10:57] – 作成 nullponjwt [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://www.rfc-editor.org/rfc/rfc7519)
  
-## 構造+主に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://www.rfc-editor.org/rfc/rfc7515.html) 
 +* [RFC7518 JSON Web Algorithms (JWS)](https://www.rfc-editor.org/rfc/rfc7518.html) 
 + 
 + 
 +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署名が利用可能。 
 + 
 +``` 
 +   +--------------+-------------------------------+--------------------+ 
 +   | "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の値に署名をつけたい場合など)
  
-HMAC(事前共有鍵を用いたハッシュ値の突き合わせ)、RSA署名、ECDSA署名が利用可能。+## JWE
  
 +JWT暗号化の仕様はRFC7516 JWEで定義されている。 
  
 </markdown> </markdown>
jwt.1650538656.txt.gz · 最終更新: 2022/04/21 10:57 by nullpon