JWT (JSON Web Token) についてメモ
JWTとは
最近 JWT認証を使う機会があったので, JWTの生成方法についてまとめます.
JWTは, 以下のような構造
{base64Encodingheader}.{base64Encodeingclaim}.{signature}
JWT生成
- base64Encodingheader
{ "alg": 署名アルゴリズム, RSA-SHA256など "typ": "JWT" }
{ "sub": ユーザの識別子 "iat": トークンの発行時間, "exp":トークンの有効期限, ...etc }
- signature(署名)
HeaderとClaimをbase64でエンコードした文字列を . で結合したものと秘密鍵 Keyで署名アルゴリズムによって,ハッシュ化.
signature = RSA-SHA256(Key , "{base64Encodingheader}.{base64Encodeingclaim}")
この工程でJWTが生成できます.
JWT = "{base64Encodingheader}.{base64Encodeingclaim}.{signature}"
JWT の比較
JWTを発行するサーバで既にユーザ1は登録済み時, ユーザ1から受信したJWTがユーザ1のものか比較する.
以下を受診した JWT とする
_JWT = "{_base64Encodingheader}.{_base64Encodeingclaim}.{_signature}"
ユーザ1が持ってる秘密鍵 Keyと送信されたJWTの署名部分以外を用いて, 署名アルゴリズムでhash化.
signature = RSA-SHA256(Key , "{_base64Encodingheader}.{_base64Encodeingclaim}")
そして, 受信された署名と今生成した署名を比較することで同じユーザのものか検証できる.
if signature == _signatture: return 1 else: return 0