JWT の生成

IBM® API Connect「JWT の生成」 セキュリティー・ポリシーを使用して、JSON Web Token (JWT) を生成します。

ゲートウェイのサポート

表 1. このポリシーをサポートするゲートウェイと、対応するポリシーのバージョンを示す表
ゲートウェイ ポリシーのバージョン
DataPower® Gateway (v5 compatible) 1.0.0
DataPower API Gateway 2.1.0

このトピックでは、アセンブリー・ユーザー・インターフェースでのポリシーの構成方法について説明します。 OpenAPI ソースでのポリシーの構成方法について詳しくは、 jwt-generateを参照してください。

製品情報

JSON Web トークン (JWT) は、2 つのパーティー間で転送されるクレームを表すための、コンパクトで、URL セーフな手段です。 「JWT の生成」 ポリシーを使用すると、クレームを生成し、それらを JSON Web 署名 (JWS) 構造のペイロードとして使用するか、JSON Web 暗号化 (JWE) 構造のプレーン・テキストとして使用するかを構成することができます。 JWS と JWE の両方の暗号素材を指定することで、ネストされた JWT が生成されます。この JWT は、デジタル署名され、暗号化もされています。 その後、JWT は、ベアラー・トークン (デフォルト・オプション) として許可ヘッダーに割り当てられるか、 JSON Web Token (JWT) プロパティー内のランタイム変数 (指定されている場合) に割り当てられます。

注:
  • アルゴリズム・タイプが HS256、HS384、および HS512 の場合、参照される暗号オブジェクトは共有秘密鍵でなければなりません。
  • アルゴリズム・タイプが RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384、PS512 の場合、参照される暗号オブジェクトは暗号鍵 (秘密鍵) でなければなりません。
  • 暗号資料は、JSON Web Key (JWK) を介して提供できます。
  • 暗号オブジェクトと JWK の両方を指定した場合、暗号オブジェクトが JWT に署名するために使用されます。

前提条件

以下の前提条件が適用されます。
  • 1つ以上の暗号化オブジェクト(cryptoオブジェクト)を使用している場合は、それらをアプライアンス上の API Connect ドメインに配置する必要があります。 DataPower アプライアンス上に 暗号オブジェクトは、JWT コンテンツの暗号化および署名に必要な共有秘密鍵または証明書を参照する必要があります。
  • JSON Web Key (JWK) が使用されている場合、JWK はランタイム変数によって参照される必要があります。

プロパティ-

以下の表に、このポリシーのプロパティーをリストします。表には、プロパティーが必須かどうか、入力用の有効な値とデフォルト値、および値のデータ型が示されています。

表 2. JWT ポリシー・プロパティーの生成
プロパティー・ラベル 必須 説明 データ・タイプ
タイトル いいえ ポリシーのタイトル。

デフォルト値は jwt-generateです。

ストリング
説明 いいえ ポリシーの説明。 ストリング
JSON Web トークン (JWT) いいえ 生成された JWT を格納するためのランタイム変数。

デフォルト値は、generated.jwt です。 ただし、設定しない場合、生成された JWT はベアラー・トークンとして許可ヘッダーに書き込まれます。

ストリング
JWT ID クレーム いいえ JWT ID (jti) クレームを JWT に追加するかどうかを指定します。

選択した場合、プロパティーが true に設定され、UUID が生成されて JTI クレーム値として設定されます。

ブール値
Issuer クレーム はい Issuer (iss) クレーム・ストリングの取得元となるランタイム変数。 このクレームは、JWT を発行したプリンシパルを表しています。

デフォルト値は、iss.claim です。

ストリング
Subject クレーム いいえ Subject (sub) クレーム・ストリングの取得元となるランタイム変数。 ストリング
Audience クレーム いいえ Audience (aud) クレーム・ストリングの取得元となるランタイム変数。 複数の変数を設定する場合は、コンマ区切りのストリングを使用します。 ストリング
有効期間 はい JWT が有効とみなされる期間として、現在の日時に追加される時間の長さ (秒)。

デフォルト値は 3600です。

整数
プライベート・クレーム いいえ 一連の有効な JSON クレームの取得元となるランタイム変数。 これらのクレームは、前に指定した任意の一連のクレームに追加されます。 ストリング
署名用 JWK 変数名 いいえ JWT に署名するために使用される JWK を格納するランタイム変数。1 ストリング
暗号アルゴリズム いいえ 使用する暗号アルゴリズム。 有効値は、以下のとおりです。
  • HS256
  • HS384
  • HS512
  • RS256
  • RS384
  • RS512
  • ES256
  • ES384
  • ES512
  • PS256
  • PS384
  • PS512
ストリング
署名用暗号オブジェクト いいえ JWT に署名するために使用する暗号オブジェクト。1 ストリング
記号 KID 値 いいえ JWT 署名用にカスタマイズされた kid 値。 ストリング
暗号化アルゴリズム いいえ 使用する暗号化アルゴリズム。 有効値は、以下のとおりです。
  • A128CBC-HS256
  • A192CBC-HS384
  • A256CBC-HS512
ストリング
暗号化用 JWK 変数名 いいえ JWT を暗号化するために使用する JWK を格納するランタイム変数。 ストリング
鍵暗号化アルゴリズム いいえ 使用する鍵暗号化アルゴリズム。 有効値は、以下のとおりです。
  • RSA1_5
  • RSA-OAEP
  • RSA-OAEP-256
  • dir
  • A128KW
  • A192KW
  • A256KW
ストリング
暗号化用暗号オブジェクト いいえ クレームを暗号化するために使用する暗号オブジェクト。 ストリング
KID 値の暗号化 いいえ JWT 暗号化用にカスタマイズされた kid 値。 ストリング

      - jwt-generate:
          version: 2.1.0
          title: jwt-generate
          description: New jwt-generate v2.1.0 policy.
          jwt: generated.jwt
          jti-claim: true
          iss-claim: iss.claim
          sub-claim: sub.claim
          aud-claim: aud.claim
          exp-claim: 3600
          private-claims: private.claims
          jws-jwk: jws.jwk
          jws-alg: HS256
          jws-crypto: jwsCryptoObjectName
          custom-kid-value-jws: jws.kid
          jwe-enc: A128CBC-HS256
          jwe-jwk: jwe.jwk
          jwe-alg: RSA1_5
          jwe-crypto: jweCryptoObjectName
          custom-kid-value-jwe: jwe.kid

エラー

ポリシーの実行中に以下のエラーがスローされることがあります。
  • RuntimeError - ポリシーの実行中に発生するすべてのエラーをキャプチャーする一般的なエラー。 失敗した時、基礎となる JOSE モジュールから受け取った詳細なエラー・メッセージがデフォルトのシステム・ログにエラー・メッセージとして書き込まれます。 この詳細なエラー・メッセージは、ランタイム変数 jwt-generate.error-message にも割り当てられるため、catch 経由で取得できます。
キャッチが設定されていない場合、障害が発生すると、 JWTポリシーの生成は HTTP コード500 Invalid-JWT-Generate のエラーを返します。 基礎となる JOSE モジュールからの詳細なエラー・メッセージは、システム・ログで見つけることができます。
重要: 顧客の 1 人が API で発生した障害をトラブルシューティングしている API 開発者は、ログ・メッセージの正確な内容を顧客に送信する前に、セキュリティー上のリスクを考慮してください。 ログ・メッセージから得た情報を基に攻撃される可能性を回避するために、顧客にはメッセージの一般的な情報のみを送信してください。
1 JWK も暗号オブジェクトも、JWT への署名に必要な暗号データを提供する有効な方法です。 ただし、両方のデータ型を指定した場合は、暗号オブジェクトのみが使用されます。 1つ以上の暗号化オブジェクト(cryptoオブジェクト)を使用している場合は、それらをアプライアンス上の API Connect ドメインに配置する必要があります。 DataPower アプライアンス上に 暗号オブジェクトは、JWT コンテンツの暗号化および署名に必要な共有秘密鍵または証明書を参照する必要があります。