JWTのフォーマット
https://jwt.io/#debugger
ここで確認できる
例
code:_
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.hJRIF4uTgQgFeiOhCIoutrBWvoQ6ZvTxPALj8YHwZf8
3つの部分からなり、.で連結されている
各部分をBASE64URLでdecodeすると、以下になる
JOSE Header (JSON)
JWS Payload (JSON)
JWS Signature (バイナリ)
url safeにするために、JSONそのままではなくBase64URL encodeしてからやり取りする
参考
/mrsekut-book-4798159298/492 (11.2.1 JWTの構造)
#WIP
JWS Compact Serializationの内容とかなり重複するmrsekut.icon
というのも、JWTは様々な仕様が混合しているものであって、
haeder
code:e.g.json
{
"alg": "HS256",
"typ": "JWT"
}
alg
JWTの署名に使うアルゴリズムの名前を指定する
JWS Signatureにも関連する
署名がない場合は"none"
JWAで規定されているアルゴリズムを指定する
typ
JWS Payloadのデータの形式が何であるのかを示す
payload
JSON本体
JWT Claimも含む
code:e.g.json
{
"userId": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
signature
code:_
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
#??
どういう効果があるのか
これがないと、平文でトークンをやり取りしていることになる?