JWT
https://openid-foundation-japan.github.io/draft-ietf-oauth-json-web-token-11.ja.html
decode
browser
cli
https://github.com/mike-engel/jwt-cli
brew install mike-engel/jwt-cli/jwt-cli
$ jwt decode -j eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"header": {
"typ": "JWT",
"alg": "HS256"
},
"payload": {
"iat": 1516239022,
"name": "John Doe",
"sub": "1234567890"
}
}
structure
- ヘッダー、ペイロード、シグネチャの3つがある
- ヘッダーは Base64 エンコードされた JSON
- ペイロードは Base64 エンコードされた JSON
- 予約語的なものもあるが、基本的には何を入れても良い
sub
はユーザ ID として使える
- シグネチャはヘッダーとペイロードを
.
で繋げた文字列の署名を Base64 エンコードしたもの - JWT とはヘッダーとペイロードとシグネチャを
.
で繋げた文字列
verification
- 署名検証
- ヘッダーとペイロードから作ったシグネチャと、
.
で区切った文字列の末尾が一致するか検証する - シグネチャの作成に必要な鍵の作成方法はサービスによる
- Google OpenID Connect では
https://www.googleapis.com/oauth2/v3/certs
で JWK として公開されている - AWS Cognito では
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
で JWK として公開されている
- Google OpenID Connect では
- ヘッダーとペイロードから作ったシグネチャと、
aud
- 誰がこの JWT を受信するべきか
- Google OpenID Connect や AWS Cognito ではクライアント ID と呼ばれる値が入っている
iss
- 誰がこの JWT を発行したか
- IdP ごとに固定の値が入る
exp
- 期限
現在時刻 < exp
であるべき
iat
- 発行日時
現在時刻 > iat
であるべき
- その他
- 例えば AWS Cognito は「
token_use
を検証してね」とマニュアルに書いてある
- 例えば AWS Cognito は「