こちらのサイトを見て学びます
JSON Web Tokenとは
JSONオブジェクトとして関係者感で情報を安全に送信するための方法
JWTをいつ利用するか
主に認証で使われる
ユーザーがログインすると、各リクエストにはJWTが含まれ、ユーザーはそのトークンで許可されているルート、サービス、リソースにアクセスすることができるようになる。また異なるドメイン間で利用することができるため、広く利用されている
JWTの構造
- ヘッダ
- ペイロード
- サイン
がある
xxxxx.yyyyy.zzzzz
こんな感じ
ヘッダ
トークンのタイプと使用されている署名アルゴリズムの2つの部分で構成される
{
"alg": "HS256",
"typ": "JWT"
}
このJSONはBase64Urlでエンコードされる
ペイロード
クレームというユーザーやデータに関するもの
クレームは登録済み、パブリック、プライベートの3種類がある
Base64Urlでエンコードされる
-
登録済み
必須ではないが、定義済みのクレーム
iss(発行者), exp(有効期限), sub(件名)などの3文字のもの -
パブリック
JWTを使用するユーザーが自由に定義できる -
プライベート
使用に同意する当事者感で情報を共有するために作成されたもの
以下は例
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
サイン
署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、秘密、ヘッダーで指定されたアルゴリズムを取得し、それに署名する必要がある
署名は、メッセージが途中で変更されていないことを確認するために使用され、秘密鍵で署名されたトークンの場合は、JWT の送信者がその送信者本人であることを確認することもできる
例
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWTはどのように使用されるか
認証では、ユーザーが資格情報を使用して正常にログインすると、JSON Webトークンが返される。トークンは資格情報であるため、一般にトークンは必要以上に長く保持してはいけない。
ユーザーエージェントはBearerスキーマを使用してAuthorizationヘッダーでJWTを送信する
Authorization: Bearer <token>
トークンがAuthorizationヘッダーで送信される場合、Cookieを使用しないため、CORSにならない
まとめ
出力はドットで区切られた 3 つの Base64 URL 文字列であり、HTML および HTTP 環境で簡単に渡すことができる。