JWT
JSON Web Token。 認証や認可の情報をJSON形式でやり取りする際に使用できるフォーマットのこと。 デジタル署名を付与することもできる。
JWTの構造
署名が付与されたJWTはドット(.
)で区切られた3つの部分に分けることができる。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.4pcPyMD09olPSyXnrXCjTwXyr4BsezdI1AVTmud2fU4
ヘッダ
3つに分けた最初の部分。 タイプとハッシュアルゴリズムの2つの情報を保持するJSONで、改行やスペースを除去した状態にしてからBase64でエンコードされる。 タイプ部分は通常JWT、ハッシュアルゴリズムにはHS256やRS256などが設定される。
{
"alg": "HS256",
"typ": "JWT"
}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
ペイロード
3つに分けた2つ目の部分。 ヘッダと同じようにJSONであり、改行やスペースを除去した状態にしてからBase64でエンコードされる。
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
署名
3つに分けた3つ目の部分。 改ざんを検知することができる。また、秘密鍵で署名されている場合は送信元についても検証できる。 エンコードされたヘッダとペイロードをヘッダで指名した署名アルゴリズムによって署名する。 以下はHMAC SHA256アルゴリズムで署名する際の例。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)