ねこものがたり

プログラミングあれこれ

JWTについて調べた

業務でJWTを(他の人が)実装したんだけど、全然わからなかったので自分なりに調べてみたことをまとめます。

JWTとは

JSON Web Token。電子署名付きのURL-safeなJSONのこと。

URL-safeとは

とは?というのが雰囲気でしかわからない。urlに使うことができる文字列から成っているということと理解しています。ご存知でしたら教えてくださいー

クライアントとサーバー

JSON Web Token Introduction - jwt.ioでは認証と情報交換の2つのユースケースが書かれていますが、今回認証で使ったので認証を例にすると、クライアントとサーバーのやり取りはこのようになります。

Image from Gyazo

JWTの中身

①HEADER②Payload③Signatureの3つから成っていて、.で区切られています。

{ HEADER.Payload.Signature
 }

上の図で言うとサーバー側からクライエント側に送られるわけですが、暗号化されているので、見た目は訳がわからない感じの文字列です。

JSON Web Tokens - jwt.ioで暗号化のアルゴリズムとか.で分かれている様子とかデバッグできるので、触ってみると楽しいです。

HEADER

algアルゴリズム)とtypの2つの情報を含んでいるのが基本。typJWTが該当します。(他にはどのようなものがあるか別途調べておきたい)

Payload

payloadにメインとなる情報が含まれます。 RFC 7519 - JSON Web Token (JWT)あたりを読むとどういう項目が入るのか書いてあります。

Signature

暗号化とその復号のために秘密鍵・公開鍵を使用しますが、「これは正しい(秘密)鍵を使って暗号化した情報です」というのが保証されているのが電子署名の仕組み。 まず平文をダイジェスト値にたものを暗号化するという仕組みだそうです。

参考

RFC 7519 - JSON Web Token (JWT)

JWT(JSON Web Token)を使った認証を試みる | 69log

公開鍵暗号と電子署名の基礎知識 - Qiita

JSON Web Tokens - jwt.io

暗号化アルゴリズム - マイクロソフト系技術情報 Wiki