JWT とは
JWT(JSON Web トークン)は、クライアントとサーバーがセキュリティ関連データを交換するためのオープン標準です。各 JWT には、クレームを含むエンコードされた一連の JSON オブジェクトがあります。トークンの発行後にクレームを変更できないようにするために、JWT は暗号化技術を使用して署名されています。
アプリケーションの様々な機能に対応する限られた数のサービスを提供する、マイクロサービスベースの非常に基本的なアプリケーションを検討します。JWT を使用しない場合、認証サーバーは、処理する必要があるすべてのリクエストにとってボトルネックになります。現在のリクエストの資格情報を検証するには、各マイクロサービスが認証サーバーと通信する必要があります。
JWT を使用すると、認証サーバーの負荷を減らすことができます。認証後、認証サーバーはトークンを発行します。すべてのリクエストは、このトークンを付けて送信されます。トークンは、クライアントまたはマイクロサービスで維持管理されます。リクエストを受信するサーバー/マイクロサービス/当事者は、ネットワーク操作を必要とせずに、トークンを独立に検証できます。アーキテクチャが拡大して数千ものマイクロサービスが含まれるようになると、このことはきわめて重要になる可能性があります。JWT によってネットワーク呼び出しの数が減るので、待ち時間が短縮されます。
JWT の構成要素
JWT は、3 つの部分で構成される文字列です。各部は Base64 を使用してシリアル化され、ドット(.)で区切られています。最も一般的なシリアル化形式であるコンパクトシリアル化では、JWT は xxxxx.yyyyy.zzzzz のような文字列になります。
デコードされると、次の 2 つの JSON 文字列が得られます。
- ヘッダーとペイロード
- 署名
ヘッダー
トークンのタイプと、トークンの内容を保護するために使用されている暗号化アルゴリズムに関する JWT ヘッダーメタデータです。
{
"alg": "HS256",
"typ": "JWT"
}
ヘッダーは、次のフィールドで構成されています。
- alg - アルゴリズム
- jku - JWK セット URL
- jwk - JSON Web キー
- kid - キー ID(JWS の保護に使用されたキーを示します)
- x5u - X509 証明書(チェーン)URL
- x5c - X509 証明書
- x5t - X509 証明書 SHA-1 拇印
- x5t#256 - X509 証明書 SHA-256 拇印
- typ - トークンのタイプ
- cty - コンテンツタイプ
- crit - クリティカルヘッダー
ペイロード
JWT ペイロードには、ユーザーの ID と許可された権限が格納されています。
{
"sub": "007",
"name": "James Bond",
"admin": true
}
JWT ペイロードでは次のクレームがサポートされています。
- iss
- sub
- aud
- exp
- nbf
- iat
- jti
署名済み JWT(JSON Web 署名 - JWS)
JWS は次の 3 つの部分で構成されています。
- BASE64URL(UTF8(JWS で保護されたヘッダー))||「.」||
- BASE64URL(JWS ペイロード)||「.」||
- BASE64URL(JWS 署名)
サポートされている署名アルゴリズムは次のとおりです。
- HS256
- HS384
- HS512
- RS256
- RS384
- RS512
- ES256
- ES384
- ES512
- PS256
- PS384
- PS512
暗号化された JWT(JSON Web 暗号化 - JWE)
JWE は次の 5 つの部分で構成されています。
- BASE64URL(UTF8(JWE で保護されたヘッダー))||「.」||
- BASE64URL(JWE で暗号化されたキー)||「.」||
- BASE64URL(JWE 初期化ベクター)||「.」||
- BASE64URL(JWE 暗号文)||「.」||
- BASE64URL(JWE 認証タグ)
サポートされているコンテンツ暗号化アルゴリズム
- A128CBC-HS256
- A192CBC-HS384
- A256CBC-HS512
- A128GCM
- A192GCM
- A256GCM
キー暗号化アルゴリズム:
- RSA1_5
- RSA-OAEP
- RSA-OAEP-256
- ECDH-ES
- ECDH-ES+A128KW
- ECDH-ES+A192KW
- ECDH-ES+A256KW
- A128KW
- A192KW
- A256KW
- A128GCMKW
- A192GCMKW
- A256GCMKW
- PBES2-HS256+A128KW
- PBES2-HS384+A192KW
- PBES2-HS512+A256KW
JSON Web 署名(JWS)と JSON Web 暗号化(JWE)
ColdFusion では、JWS と JWE もサポートしています。