JWT
http://jwt.io/img/logo-asset.svg
JWT (JSON Web Token) とは
JSON を利用した、コンパクトで URL-safe な claim の表現方法、とよく一言で言い表される。RFC 7519 に仕様が存在する。
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 があるということのようだ。
https://tools.ietf.org/html/rfc7519#section-2
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 等の公開鍵方式で暗号化される場合、トークンは秘密鍵を利用して生成され、公開鍵でチェックされる
詳しいこと
https://www.ibm.com/support/knowledgecenter/en/SSB23S_1.1.0.15/gtps7/s7pkey.html