JWT(Json Web Token)とは?
電子署名付きのURLセーフ(URLとして利用できる文字だけで構成される)なJSON形式のトークンのことです。「ジェーダブリューティー」ではなく「ジョット」と読みます。
サイズも小さいため、URL、POSTパラメータ、HTTPヘッダ内で送信することができます。
異なるドメイン間でも使うことができるので、SSO(シングルサインオン)でも使われています。
ただ、あくまでBase64エンコードされただけであり、暗号化はしていないので、誰でも見ることができます。あくまで、JSONが改ざんされていないか、発行者によって検証ができるものです。
base64とは?
文字やバイナリの圧縮方法の一つです。
64進数を表す用語で、アルファベット、数字、一部記号を含めた64文字で表現するエンコード方式です。(特殊文字は含むことができない。)
用途
メールの送受信に利用される
メールの送受信ではかつて、ASCIIという7ビットのエンコード方式でしかメールを送ることができませんでしたが、MIMEという規格が登場して、base64で変換する方式が採用されて、画像や音声を送ることができるようになったのが登場のきっかけでした。
「URLセーフ」にするために利用される。
URLには使用することができない文字があります。(例えば、イコール「=」等)
base64にてエンコードして、URLで使用できない文字を排除するために使用されます。(これを「URLセーフ」と呼びます。)
特徴
あくまで文字や、画像等のバイナリファイルのエンコードを行うだけで、暗号化をするわけではありません。
署名とは?
署名時に使った鍵を用いて、JSON が改ざんされていないかをチェック出来るようにすることです。
電子署名については、下記の記事で解説しているので、ご参考にされて下さい。
URLセーフとは?
URLに使用できない文字を含まないことです。base64エンコードにて、実現したりするのが一般的です。
JWTのデータの流れ
ポイントとしては、JWTは、「ローカルストレージ」にキャッシュされて、その後、何度も認証に利用される点です。
ローカルストレージについては、下記の記事で解説しています。
また、サイドJWTが改ざんされていないかチェックする場合は、「ユーザーID」と「有効期限」をセットで検証します。
JWTの用途
主に、検証サーバーに使われます。ただ、昨今の流れとしてはいくらユーザー名やパスワードなどを暗号化したからといって自分のサーバーでそうした情報を保持するのはよくないと言われているのでAuth0なり、FirebaseなりCognitoなりサードパーティ製品を使った方が望ましいと言われています。
JWTの構成
JWTは、下記の構成になっています。
1 |
ヘッダ.中身.電子署名 |
ヘッダ
署名のアルゴリズム等のメタ情報が入っています。(base64エンコードされている。)
中身
ユーザーIDや、有効期限等のJWTの中身の情報がJSON形式で入っています。(base64エンコードされている。)
電子署名
検証に利用される電子署名の情報です。
この記事へのコメントはありません。