JWTについてまとめたい


なぜやるの?

私はチーム開発をやっている.そこでJWTを使って認証を行うことになった
JWTを触ってることが多いのでまとめたい

どうやるの?

  • JWTとは?
  • JWTの構造
  • JWTが有効だと考えられる場所

JWTとは?

jwtはjson web tokenの略で読み方はジョットと読むらしい
認証情報を持ったJSONをbase64urlencodeで送受信するtokenのことで
署名を付けることによりtokenが改ざんされているのかされていないのかをチェックすることができる.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoidGVzdCIsImFkbWluIjp0cnVlLCJleHAiOjE1MzkxOTQ3MTZ9.b6uuYw5ZA-LEfcpkerobCVm5aXSBv88iID4k-HesieA

jwtは上のようになっていて
ピリオドで区切ることができる

JWTの構造

ヘッダー,ペイロード,シグネチャに分かれる

ヘッダー部分

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

base64urlencodeされている
デコードすると
以下のようになる

{"alg":"HS256","typ":"JWT"}

algはシグネチャでどのアルゴリズムを使うかを宣言している
この場合はhmacsha256を使うことがわかる
tyopeはJWTであることを表している

ペイロード部分

eyJuYW1lIjoidGVzdCIsImFkbWluIjp0cnVlLCJleHAiOjE1MzkxOTQ3MTZ9

ヘッダと同じようにデコードすると

{"name":"test","admin":true,"exp":1539194716}

ここはまぁ...自由に定義することができる
expは有効期限を表している

シグネチャ部分

b6uuYw5ZA-LEfcpkerobCVm5aXSBv88iID4k-HesieA

シグネチャは検証部分に使われる.
このシグネチャ部分は以下のように求められる

ハッシュ関数(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

今回ハッシュ関数はHMACSHA256になっている

JWTが有効だと考えられる場所

これの役立つところはSSOみたいにサービス間の認証が容易であるということである
マイクロサービスで構築している認証に関してはsessionよりも楽にセキュリティを担保することができるだろう

まとめ

マイクロサービスをやりたいときはとても有効だと考える
なぜならサーバにtokenを持たなくていいのでどこのでスケールしたあとも管理が楽というメリットがあると考える

ありがとうございました