JWT
JWT(JSON Web Token)は、クレームを JSON オブジェクトとして安全に伝えるコンパクトで自己完結型のトークンである。ステートレス認証と情報交換に広く使われる。
目的
ステートレスなサービス間で認証情報を渡し、サーバー側のセッション保存をなくす。
メカニズム
Header(アルゴリズム).Payload(クレーム).Signature の 3 部構成で、すべて Base64URL 符号化される。署名は HMAC か RSA を使い、検証により完全性が保証される。クレームには iss(発行者)、exp(有効期限)、sub(主体)がある。トークンは暗号化されないため、ペイロードに機密データを入れないこと。
ユースケース
- ステートレス API 認証
- OAuth 2.0 トークン
- SSO のクロスドメイン身元転送
- サービス間認証
例
- 入力
header.payload.signatureOutputRead the payload after verifying the signatureBase64URL plus signature
よくあるエラー
- Placing sensitive data in the payload (it is only Base64, not encryption)
- Keep only non-sensitive claims in the payload
関連用語
OAuth
OAuth 2.0は、ユーザーの同意の下で、パスワードを共有せずにトークンを使ってサードパーティアプリケーションがユーザーのリソースへアクセスできるようにする認可フレームワークである。 用語集
Cookie
Cookie とは、サーバーが設定しブラウザが保存するキーバリューペアであり、同一オリジンへのリクエストに自動的に付送されてセッションと状態の管理に使われる。 用語集
HMAC
HMAC(Hash-based Message Authentication Code)はハッシュ関数と秘密鍵を組み合わせたメッセージ認証コードであり、完全性と真正性を提供する。 用語集
Bearer Token
Bearer トークンは純粋に所持だけで機能するトークンである。Authorization: Bearer <token> ヘッダーで送られ、追加のクレデンシャルなしに、持っている者なら誰でも使える。 用語集