JWT認証についてメモ jwt

■1 JWTとは
JWT(JSON Web Token)は、署名の出来るJSONを含むURL Safeなトークン。
情報をすべて内部に格納し、検証可能。属性情報をJSONデータ構造で表現しRFC 7519 で標準化された仕様。


■2 JWTの特徴
1 署名されているため改ざんをチェック可能
2 URL Safe (URLに含むことができる文字のみで構成)
3 実際のデータはJSON文字列となる(暗号化ではないので誰でも見ることが可能)


■3 JWTの構成
JWTはピリオド( . )区切りのHeader、Payload、Signatureから構成。
各部位はBase64URLエンコードされている。
1 Header
署名のアルゴリズムなどJWTを取り扱うために必要なパラメーターを含む
2 Payload
ユーザー識別子や認証時刻などユーザーの認証情報のパラメーターを含む
3 Signature
HeaderとPayloadから生成された改ざん防止のための署名。
Base64URLエンコードされたHeader + . + Payload(ピリオドで連結) を入力値として署名した結果をBase64URLエンコードした文字列


■4 検証フロー
JWT検証機能を各システムに組み込む。(ページ読み込み時に最初に呼ぶ)
JWT検証機能での検証フローは以下となる。
1 JWTを「.」(ドット)で区切り、header部、payload部、signature部の3つへ分割。
2 分割したheader、payload、signatureをbase64urlでデコード
3 確認1 headerから署名アルゴリズムを確認
4 確認2 生成した値とシグネチャー部の文字列が一致することを確認
5 確認3 有効期限内であることを確認
6 確認4 iatの時間を確認

・確認1~2の手順において検証に失敗する場合は、改ざんされている可能性があるため認証処理を中断し、エラー処理
・確認3~4の手順において検証に失敗する場合は、有効期限切れや認証時刻が過ぎているため認証処理を中断し、再度Token取得処理
・上記の検証がすべて正しく行えた場合のみ対象のサービスを認証とし、必要に応じて各パラメーターの値を利用する


■他 JWTとセッションとの違い
セッションを使うことにより、JWTと同様のことが可能であるが、
JWTの場合は、トークンそのものを検証することで認証可否を判断するため
サーバー側でデータを持つ必要がない。(セッションとは異なる)
よってトークンを発行したホストと、トークンを検証するホストが異なる場合でも検証可能