JWT
http://jwt.io/img/logo-asset.svg
JWT (JSON Web Token) とは
JWT の JSON オブジェクトは 0 以上の name/value ペアで構成され、name は文字列、value は任意の JSON オブジェクトとなる。そして、この name/value ペアを claim として参照する。特に、name 群は JWT Claim Names、value 群は JWT Claim Values として参照される。claim は JWS や JWE、時にはその組み合わせでエンコードされる。 RFC 上では、claim は、「主体」について言及した情報の一部、という曖昧な表現がされている。
Claim
A piece of information asserted about a subject. A claim is represented as a name/value pair consisting of a Claim Name and a Claim Value.
JWT 自体はその名の通りトークンの形式に言及しているもので、その内部に保持するデータのエンコード形式として JWS や JWE があるということのようだ。 JWT は、自己完結型で、クライアントサイドで格納するため人気がある。クライアントサイドで格納するので、セッションに関連する情報を Stickey session 等でサーバー側に格納しなくてよくなる。 JWT の構成
Header
トークンのタイプや利用している Signature 等のメタ情報を保持する。タイプは通常常に JWT になる。Signature は、トークンの署名にどのようなアルゴリズムが利用されているかを示す。
Payload
大抵 claim を保持するが、あらゆる種類の情報をエンコードして保持できる。Claim は、大雑把にはトークンの所有者の権限を保持する。例えば、"read-post" claim を保持している倍は、全てのポストの閲覧が可能で、"delete-post" claim を保持していれば、あらゆるポストの削除が可能になる。
Signature
エンコードされたシグネチャを持つ。これを利用して、トークンの検証や、通信中に改ざんが行われていないことの確認を行う。
JWT の流れ
1. クライアントは、認証情報 (パスワードやフィンガープリント、face ID 等) とともにサーバーにトークンを要求する
2. サーバーはトークンを提供する。トークンの精製方法には二種類ある
H256 等の安全なエンコーディングを利用して生成される場合、安全に格納された secret を利用して生成され、その secret でチェックされる
RDA 等の公開鍵方式で暗号化される場合、トークンは秘密鍵を利用して生成され、公開鍵でチェックされる
詳しいこと