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)