Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
- JWTとはJSON Web Tokenの略
- JSONを使ったurl-safeなクレームの表現方法
- JWSとJWE構造の両方の中にエンコードされるJSONクレームのセット
(JWTを作る方法としてJWSとJWE、もしくは両方を使った方法がある)
構造 †
構成要素 †
以下の要素から構成される。
ヘッダ †
クレーム †
- 予約済みクレーム
- パブリッククレーム
- プライベートクレーム
署名 †
JWTの種類 †
JWS †
署名されたJWT
BASE64URL (UTF-8 (Header))
.
BASE64URL (UTF-8 (Claim Set))
.
Base64url (UTF-8 ( Signature))
JWE †
暗号化されたJWT
BASE64URL (UTF-8 (JWE Protected Header))
.
BASE64URL(JWE Encrypted Key)
.
BASE64URL(JWEInitialization Vector)
.
BASE64URL(JWE Ciphertext)
.
BASE64URL(JWE Authentication Tag)
プレーンJWT †
ヘッダ内のalgはnone = {“alg”: “none”} 。
BASE64URL (UTF-8 (Header))
.
BASE64URL (UTF-8 (Claim Set))
JWTの作成と検証手順 †
難しいのでライブラリを使用する。.NETならNugetからメジャーな奴を入れる。
JWTの作成手順 †
概要 †
- JWSまたはJWEの手順に従って生成
- 入れ子になったJWTの場合にはヘッダの”cty”の値に”JWT”を指定
手順(JWS) †
- ヘッダを生成し、UTF-8のバイト文字列に変換し、BASE64urlエンコード。
- クレームセットを生成し、UTF-8のバイト文字列に変換し、BASE64urlエンコード。
- BASE64urlエンコード済みのヘッダとクレームセットを
ピリオドで連結する、UTF-8バイト文字列に変換し、BASE64urlエンコード。
- 上記をヘッダで指定した暗号化プロバイダで暗号化(ハッシュ or 暗号化)
JWTの検証手順 †
- JWTをヘッダ、クレームセット、署名に分割しBASE64urlでデコード
- ヘッダから種類(JWT、JWS、JWE)、暗号化プロバイダを確認
- 種類、暗号化プロバイダを考慮してJWTの検証を行なう。
- JWTの検証が完了した後、クレーム内の有効期限の検証も行なう。
認証用途でJWT利用 †
参考 †
Tags: :認証基盤, :クレームベース認証