ユーザ用ツール

サイト用ツール


jwt

文書の過去の版を表示しています。


<markdown> # JWT

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

* [RFC 7519: JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519)

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

## 構造

``` eyJhbGciOiJFUzI1NiJ9.eyJ0ZW1wZXJ0dXJlIjoyMC4yLCJodW1pbml0eSI6NTQuOCwiZHQiOiIyMDIyLTA0LTIwVDEyOjUwWiJ9.sQl6Wq5Tw9leXQ26gZgy4MwLks_snWt9Ol93h0stC6Q046CbiEpzdKU88Rhw1Y3jlwMf0DgplAJxm4ZtvJa9kg ```

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

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

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

JWT暗号化の仕様は[RFC7516 JWE](https://www.rfc-editor.org/rfc/rfc7516.html)で定義されている。

## ペイロード

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

### トークン

データは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

## 署名

`ヘッダ.ペイロード` に対する署名データ

* [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)

### アルゴリズム

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                     |                    |
 +--------------+-------------------------------+--------------------+

```

現在、最もよく使われているのは `RS256`、`none`は使うべきではない

</markdow n>

jwt.1691543962.txt.gz · 最終更新: 2023/08/09 01:19 by nullpon