JWTの基本フォーマット
{base64 Encoded Header}.{base6 Encoded Claims}.{Signature}
{
"alg": "RS256",
"typ": "JWT"
}
これに基づき、JSON Web Signatures(JWS)(RFC 7515)により署名される。
※なお、このalg
パラメータで指定するJSON Web Algorithms(JWA)(RFC 7518)は、使える暗号サブセットが決まっていることもあり、脆弱性となりやすい。
また、alg
=none
を指定可能であり、その場合、非常に脆弱となる。
Google APIで利用する場合は、次の通り。
{
"iss": "xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/drive",
"aud": "https://www.googleapis.com/oauth2/v3/token",
"exp": 1433469193,
"iat": 1433465593
}
iss(Issuer),aud(Audience),exp(Expiration Time),iat(Issued At)が本来のパラメータである。
他にもsub(Subject),jti(JWT ID),nbf(Not Before)などが登録できる。
{base64 Encoded Header}.{base6 Encoded Claims}.{Signature}
Headerのalgで指定されたアルゴリズムで署名する。秘密鍵はGoogle Cloud Platformから払い出されたものを利用する。
{
"assertion": YOUR_JWT,
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer"
}
これをPOSTすると、アクセストークンを取得することができる