Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490
JWTとはJSON Web Tokenの略称であり、属性情報(Claim)をJSONデータ構造で表現したトークンの仕様です。
JWTの例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
JWTの構成をわかりやすくするため、改行をしてみます。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
すると、JWTは2つのピリオド(”.”)で区切られた3つのパートによって成り立っているということがわかります。
この3つのパートにはそれぞれ役割があり、前から順番にヘッダー(Header)、ペイロード(Payload)、署名(Signature)となっています。
<ヘッダー>.<ペイロード>.<署名>
ヘッダー
ヘッダーはJWTの署名検証を行うために必要な情報を格納するためのパートとなっています。
文字列の形式としては、キー名と値のペアで表現されたJSONをBase64urlエンコードした文字列となっています。
Base64エンコードの場合は”+”, “/”, “=”が含まれますが、JWTはURIのクエリパラメーターなどに使用されることを想定しているので、URL-safeに表現するためにBase64urlエンコードがされています。
Base64urlエンコードでは”+”を”-“に、”/”を”_”、”=”を””に変換しています。
デコードをするとJSONに変換できるので、デコードをしてみます。
ペイロード
ペイロードはやりとりに必要な属性情報(Claim)です。
ペイロードの内容はアプリケーションによっては異なるため、必須とされるものは存在しませんが、相互運用性のある属性情報については予約済みパラメーターとして提供されています。
ヘッダーと同様に、JSONをBase64urlエンコードした文字列なので、デコードが容易にできます。
{
"admin": true,
"name": "John Doe",
"sub": "1234567890"
}