業務でJWTを(他の人が)実装したんだけど、全然わからなかったので自分なりに調べてみたことをまとめます。
JWTとは
JSON Web Token。電子署名付きのURL-safeなJSONのこと。
URL-safeとは
とは?というのが雰囲気でしかわからない。urlに使うことができる文字列から成っているということと理解しています。ご存知でしたら教えてくださいー
クライアントとサーバー
JSON Web Token Introduction - jwt.ioでは認証と情報交換の2つのユースケースが書かれていますが、今回認証で使ったので認証を例にすると、クライアントとサーバーのやり取りはこのようになります。
JWTの中身
①HEADER②Payload③Signatureの3つから成っていて、.
で区切られています。
{ HEADER.Payload.Signature }
上の図で言うとサーバー側からクライエント側に送られるわけですが、暗号化されているので、見た目は訳がわからない感じの文字列です。
JSON Web Tokens - jwt.ioで暗号化のアルゴリズムとか.
で分かれている様子とかデバッグできるので、触ってみると楽しいです。
HEADER
alg
(アルゴリズム)とtyp
の2つの情報を含んでいるのが基本。typ
はJWT
が該当します。(他にはどのようなものがあるか別途調べておきたい)
Payload
payloadにメインとなる情報が含まれます。 RFC 7519 - JSON Web Token (JWT)あたりを読むとどういう項目が入るのか書いてあります。
Signature
暗号化とその復号のために秘密鍵・公開鍵を使用しますが、「これは正しい(秘密)鍵を使って暗号化した情報です」というのが保証されているのが電子署名の仕組み。 まず平文をダイジェスト値にたものを暗号化するという仕組みだそうです。
参考
RFC 7519 - JSON Web Token (JWT)