JWT形式
JWT = Json Web Tokenの略。
ID自体に情報を載せ、署名をつけることで検証可能にしたIDの形式。
以下3つの情報から構成される。
JWT header
JWT payload
JWT signature
それぞれの関係はこんな感じ
code:pseudo.pp
$header = {typ: JWT, alg:XXX}
$payload = {...}
$temp = base64($header) + "." + base64($payload)
$signature = hash($header.alg, $temp, $secret)
$jwt = $temp + "." + $signature
一見するとpayloadは分からないが、Base64でエンコードされてるだけなので誰でも見ることができる。
暗号化されているわけではないので誤解しないこと。
code:example.jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
↓
code:example.txt
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
デコード・署名検証が地味にめんどいのでWebデバッガがある(Auth0提供)
https://jwt.io/
資料
https://scgajge12.hatenablog.com/entry/jwt_security