目次
- 背景
- JWTとは
- エンコードの中でもBase64URLエンコードを使う理由
1. 背景
業務でJWTについて扱っている為です。
2. JWTとは
- JSON Web Tokenの略
- JSONデータをURLセーフにする方法を規定したもの
- JSONデータをコンパクトにする方法を規定したもの
RFCではJWTの仕様として次のように定義されています。
- URLセーフにする方法
JSONデータをBASE64URLエンコードする - コンパクトにする方法
よく使われるデータ項目の名称を省略形にすることでJSONのキー名を短くする
JWTの仕様として省略名が予約されています
省略名 | 項目名 | 説明 |
---|---|---|
iss | issuer | JWTの発行者 |
sub | subject | ユーザの識別子などJWTの主体 |
aud | audience | JWTの受信者 |
exp | expiration time | JWTの有効期限 |
nbf | Not Before | JWTの有効開始日時 |
iat | Issued At | JWTの発行日時 |
jti | JWT ID | JWTの一意な識別子 |
クレーム(Claim)
JSONのデータ項目といっていたJSONのキーと値のペアはJWTでは「クレーム(Claim)」と言います。
{
"iss": "io.exact.sample.jwt",
"sub": "saumple",
"exp": 1670085336
}
- 上の例ですと、"exp": 1670085336 はクレーム、expはクレーム名、1670085336はクレーム値と言います。
- 先ほど挙げたissやsubなどJWTで予約されているクレーム名は「登録クレーム名(Registered Claim Names)」と呼ばれます。しかし、この登録クレーム名の使用は任意です。
- 任意のクレームをJWTに含めることも可能です。
3.Base64URLエンコードを使う理由
Base64
- 64個のテキスト文字からなるBase64セットのテキスト文字を使用してバイナリデータを表現し、誤って解釈することはないです。
- 非常に一般的なエンコーディングフォーマットであり、ほとんどのプログラミング言語で簡単に使用できます。
Base64url
URLセーフなので、トークンをURLで送信することができます。
参考
- 基本から理解するJWTとJWT認証の仕組み
- Why do you use base64 URL encoding with JSON web tokens?
- Why Base64 is used in JWTs?