TIL : JWT(Json Web Token)とは一体なんなのか

2019/11/08(Fri) - 19:19

署名の出来る JSON を含んだURL Safeなトークン」である。

  • 署名とは
    • 「署名時に使った鍵を用いて、JSON が改ざんされていないかをチェック出来るようにする」こと
  • URL Safe とは
    • 「URL に含めることの出来ない文字を含まない」こと

特徴

  1. 発行者のみ鍵を使ってトークンが正しいことを検証可能
  2. 暗号化ではない(暗号化のオプションもある) / JSONの中身は誰でも見れる
  3. 改ざんされると検証時に失敗する == JSONの変更はできない

ひとことでいうと「変更することができないJSON」である。

どう使われるのか

上記の特徴から、認証サーバなどで利用されることが多い。

  1. クライアントから認証サーバに認証情報(ID/PASS)を渡してトークンを請求
  2. 認証サーバは認証情報が正しいことを確認、秘密鍵を使って署名された JWT を発行する(発行されたJWT は user_id と expiration_date を含む)
  3. クライアントはこの JWT を使って通常の API リクエスト実施
  4. サーバは秘密鍵を使ってJWT検証を行い、user_idをJSON から取り出して処理を行う

通常はこのようなトークンを発行すると、「user_id」を書き換えると全ユーザにアクセスできたり「expiration_date」を書き換えると無限に有効期限が切れないトークンが作成できたりしてしまうセキュリティホールを作成してしまう

JWTの場合は改ざん検証が可能 なため、サーバ側で検証が通らないトークンは全て弾かれる(サーバ側で事前に許可した user_id / expiration_dateのみ通過する)

カテゴリ

タグ