API トークンコンプライアンス検証は、定義したトークン設定に基づいて、受信リクエスト内の JSON Web Token (JWT) を検証します。カスタム JWT を追加し、検証が必要な API にバインドすることで、Edge Security Acceleration (ESA) が受信リクエストを検証し、ビジネス API を保護できます。
制限事項
API トークンコンプライアンス検証には、次の制限事項があります。
対応トークンタイプ:現在、JSON Web Token (JWT) のみに対応しています。
公開鍵のフォーマット:JWK フォーマットのみに対応しています。JWT 公開鍵には、
kidおよびalgフィールドを含める必要があります。署名アルゴリズム:現在、
ES256(SHA-256 を使用した ECDSA) とRS256(SHA-256 を使用した RSA) の署名アルゴリズムに対応しています。
前提条件
サイトが ESA に追加されていること。
JWK フォーマットの JWT 公開鍵。キーペアを生成するには、「JWT の生成方法」をご参照ください。
API トークンルールの設定
API トークンコンプライアンス検証を有効にするには、まずトークン設定を追加し、次にその設定を API に適用する API ルールを作成するという、2 つの手順を順番に完了する必要があります。
トークン設定の追加
ESA コンソールにログインします。
ESA コンソールでサイト管理 を選択し、サイト 列で対象のサイトをクリックします。
左側のナビゲーションペインで、セキュリティ保護 > API セキュリティ を選択します。
API セキュリティ ページで、API ルール タブを選択し、トークン設定 をクリックします。

設定ページで、追加 をクリックしてトークン情報を追加します。

ビジネス要件に基づいて、次のトークンパラメーターを指定します。
名前:任意のトークン名 (例:
JWT-Demo) を入力します。トークンの位置:リクエスト内でのトークンの場所を選択します。ヘッダー または Cookie フィールドを選択し、対応するキーを入力します。 ビジネス全体で場所が異なる JWT に対応するには、Or をクリックして論理的な
OR条件を作成します。最大 4 つのトークンの場所を同時に評価できます。シークレットキー:手動で入力するか、JSON ファイルをアップロードしてトークンキーを追加します。キーの要件については、「JWK フィールド」をご参照ください。 複数のキーを設定した場合、ESA は
kidフィールドに基づいて検証用のキーを選択します。いずれかのキーでトークンの検証に成功すれば、検証は成功と見なされます。
OK をクリックします。
API ルールの作成
API ルール タブに戻り、ルールの追加 ボタンをクリックします。

ビジネス要件に基づいて、トークン検証パラメーターを設定します。
ルール名:任意のルール名 (例:
rule-jwt-demo) を入力します。API の検証:ドロップダウンリストから、トークンのコンプライアンス検証が必要なホストレコードを選択します。ESA によって、選択されたホストレコードの API リストが表示されます。リストを確認し、検証したい API を選択します。
トークン設定の選択:検証するトークンを 1 つ以上選択します。複数のトークンを選択した場合は、次のいずれかのオプションを選択します。
[少なくとも1つの設定を検証]:リクエストは、少なくとも 1 つのトークン設定に一致する必要があります。一致しない場合、リクエストは非準拠と見なされます。
すべてを検証:リクエストは、すべてのトークン設定に一致する必要があります。一致しない場合、リクエストは非準拠と見なされます。
デフォルトでは、トークンを含まないリクエストは非準拠として扱われます。特別な要件がある場合は、トークンの右側にある トークンなしの場合 列に移動し、ドロップダウンリストから 無視 を選択します。
実行アクション:トークン検証に失敗したリクエストに適用するアクションを選択します。
保護結果
API ルールを作成した後、左側のナビゲーションペインで セキュリティ保護 > イベント分析 を選択します。イベント分析ページで、フィルターで保護ルールとして API ルール を選択します。次に、サンプリングログ エリアまでスクロールダウンして、詳細な保護ログを表示します。
JWK フィールド
送信するキーにコメントを含めることはできません。
JWK 公開鍵には、次のフィールドが含まれます。
kty:キータイプ。たとえば、ECは楕円曲線キーを、RSAは RSA キーを示します。use:公開鍵の目的。たとえば、sigはキーがデジタル署名に使用されることを示します。crv:楕円曲線のタイプ。たとえば、P-256は NIST によって定義された P-256 楕円曲線を示します。kid:任意のキー識別子 (例:esa)。JWK には、キーを選択するために使用されるkidフィールドを含める必要があります。同様に、リクエストの JWT 内のクレームにもkidフィールドを含める必要があります。このフィールドを使用して、トークンキーをローテーションできます。n:RSA キーのモジュラス。e:RSA キーの公開指数。x:楕円曲線公開鍵の x 座標。y:楕円曲線公開鍵の y 座標。alg:アルゴリズム識別子。現在、ES256(SHA-256 を使用した ECDSA) とRS256(SHA-256 を使用した RSA) に対応しています。
例
次の例は、RSA 形式の JWK 公開鍵を示しています。RSA キーを使用する場合、crv、x、および y フィールドは空の文字列のままにします。
{
"kty": "RSA",
"use": "sig",
"kid": "esa",
"n": "wR8LJDq2pM1uPD5KfmMaasmV20nwgVYnDlsxRjmryLStQeqW-3fe-ELV1tlYHq2-hl8HNNxz5eud8olmqxtrgpihPN9c_pbLY-Jc04_tdpWs10ms1vgoz0S11JEVCK6q9EJ_QCTAxO6GBCdI9t0oUTpBz6QuQCIJAOQdW2k7gZr8CmCn_ianTU1nTxBzAoBxO_r32kl7lx9RTFCZHBJsm8twJ7o0ZXpUjbjhOY2LgdDx3t09YDDOMDYzEOZ86NVzm8qXSekBJFf5-FGNe0Lkht1lsMlBnqlfmWz8q5zUkPZ6XslpgyVqqSaw4DGxXV8aGWRFcOB0Ac2bush6McBAhQ",
"e": "AQAB",
"alg": "RS256",
"crv": "",
"x": "",
"y": ""
}よくある質問
JWT とは
JSON Web Token (JWT) は、Web アプリケーション間でクレームを渡すために RFC7519 で定義された、オープンな JSON ベースのトークン形式です。JWT は通常、スタンドアロンの認証トークンとして使用されます。ユーザー識別子、ユーザーのロール、権限などの情報を保持できるため、クライアントはリソースサーバーからリソースを取得できます。また、他のビジネスロジックが必要とする追加のクレームを保持することもできます。このため、JWT は分散サイトのログインシナリオに適しています。
JWT は、ヘッダー、ペイロード、署名の 3 つの部分で構成されています。各部分は Base64URL エンコードされ、Header.Payload.Signature 形式の文字列を構成します。
ヘッダー:JWT のヘッダー。クレームタイプ (JWT) とトークンの署名に使用されるアルゴリズムを格納します。
ペイロード:JWT のデータ部分。有効な情報を格納し、ユーザーシステムが必要とするカスタムフィールドを含めることができます。
署名:JWT の署名部分。ヘッダーとペイロードの内容を検証するために使用されます。
次の例は JWT を示しています。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQJWT の生成方法
https://mkjwk.org を使用して、秘密鍵と公開鍵を生成します。秘密鍵はトークンの生成に使用され、公開鍵はトークンの検証に使用されます。
ブラウザで https://mkjwk.org にアクセスします。
[EC] タブをクリックします。
次のパラメーターを指定します。
[カーブ]:
P-256を選択します。[キーの用途]:公開鍵の目的として
Signatureを選択します。[アルゴリズム]:アルゴリズム識別子として
ES256: ECDSA using P-256 and SHA-256を選択します。[キー ID]:任意のキー識別子 (例:
esa) を入力します。
[生成] をクリックします。次に、[公開鍵] を選択し、[クリップボードにコピー] をクリックして公開鍵をコピーします。

