文書の過去の版を表示しています。
<markdown> # JWT
JWT(Json Web Token)は、JSONペイロードに対して署名・暗号化を施す方法を定めたプロトコル、またはそのデータ。
* https://www.rfc-editor.org/rfc/rfc7519
主にOpenIDによる認証情報の送受信に利用されるが、任意のデータの送受信に使うことも可能。
## 構造
``` eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg ```
BASE64エンコードされたデータをドットで結合したもの。内容は
``` ヘッダ.ペイロード.署名 ```
となっている
## ペイロード
JSON形式のデータ本体。
### 標準データフィールド
以下の7つのフィールドが標準で定義されている。これらの値はJWTライブラリでサポートされているケースが多い。例えばexpを過ぎていたら不正なトークンとしてエラー扱いするなど。
フィールド名 | 内容 |
— | — |
iss | Issuer、トークン発行者 |
sub | Subject、トークン識別子、認証情報のユーザIDなどが該当 |
aud | Audience、トークンの受け取り手 |
exp | Expiration、有効期限、UNIX時間で指定 |
nbf | Not Before、トークンが有効になる時刻、UNIX時間で指定 |
iat | Issued At、トークンの発行時刻 |
jti | JWT ID、トークンごとに一意なID |
これらは必須ではなく、JWTには任意のデータを載せることができる
## ヘッダ
ヘッダはJSON形式で以下の情報を格納する
フィールド名 | 内容 |
— | — |
typ | Type、タイプ、ほとんどの場合`JWT`なので大体省略される |
cty | Content Type、データ形式、これもほぼ`JWT`なので省略されがち |
alg | Algorithm、署名アルゴリズム |
## 署名
### アルゴリズム
HMAC、RSA署名、ECDSA署名が利用可能。
https://www.rfc-editor.org/rfc/rfc7518
```
+--------------+-------------------------------+--------------------+ | "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 | | +--------------+-------------------------------+--------------------+
```
現在、最もよく使われているのは `RS256`
</markdow n>