はじめに
JWTとは、JSON Web Tokenの略です。Webサービス間で情報を安全に送受信するための仕組みです。
JSONとは
JSONとは、JavaScript Object Notationの略です。JavaScriptのオブジェクトを文字列に変換したものです。
JavaScriptのオブジェクトは、キーと値のペアで構成されています。JSONも同様に、キーと値のペアで構成されています。
JSONの例
{
"name": "Taro",
"age": 20,
"address": "Tokyo"
}
Tokenとは
Tokenとは、認証情報や権限などの情報を表す文字列です。認証情報や権限などの情報を含んだ文字列をTokenと呼びます。
以下のような暗号化された文字列です。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWTの構造
JWTの構造は、以下のようになっています。
header.payload.signature
header
headerは、JWTの情報を表す部分です。この例では、HS256
というアルゴリズムを使用していることを表しています。
{
"alg": "HS256",
"typ": "JWT"
}
payload
payloadは、Tokenに含める情報を記載した部分です。
JWTのpayloadの例
{
"username": "test",
"iat": 1594628423,
"exp": 1594628428
}
この例では有効期限の情報を持っています。
iat
は、Tokenが作成された日時を表します。exp
は、Tokenの有効期限を表します。
signature
signatureは、headerとpayloadを組み合わせて、秘密鍵を使ってハッシュ化した部分です。
JWTのsignatureの例
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
このsignature
JWTの利用
JWTは、認証情報や権限などの情報を含んだ文字列です。JWTを利用することで、認証情報や権限などの情報を安全に送受信することができます。
JWTの利用例
JWTの利用例として、以下のようなものがあります。
- セッション管理
- 認証情報の送受信
- 権限の制御
JWTを使用する流れ
- ユーザーがログインする
- ユーザーのログイン情報をJWTに変換する
- JWTをCookieに保存する
- ユーザーがログインしているかを確認するたびに、JWTをCookieに保存する
- JWTの情報を使って何らかの処理を分岐する。
JWTのメリット
JWTのメリットとして、以下のようなものがあります。
- トークンに認証情報や権限などの情報を持つことができる
- トークンに有効期限を設定することができる
- 公開鍵暗号に基づくメッセージ認証コード(MAC)により、改竄やすり替え(なりすまし)が行われていないことを確認できる。
JWTのデメリット
JWTのデメリットとして、以下のようなものがあります。
- 一度認可したJWTを無効化扱いすることはできない
- トークンの有効期限が切れてしまうと、再度ログインしなければならない
- 有効期限を短くしたり、即時無効化する必要がある場合は別途仕組みを用意する必要あり
参考
JSON Web Token - Wikipedia
JWT(JSON Web Token)とは - 意味をわかりやすく - IT用語辞典 e-Words
JSON Web Token(JWT)の紹介とYahoo! JAPANにおけるJWTの活用 - Yahoo! JAPAN Tech Blog