なぜやるの?
私はチーム開発をやっている.そこで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を持たなくていいのでどこのでスケールしたあとも管理が楽というメリットがあると考える
ありがとうございました