すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:コンシューマー認証の設定

最終更新日:Jan 08, 2025

Microservices Engine (MSE) クラウドネイティブ ゲートウェイでは、認証されたコンシューマーからのアクセスのみを許可するように、ルートの認証ルールを設定できます。このトピックでは、コンシューマー認証の設定方法について説明します。

背景情報

グローバル認証は、集中ログオン認証などのTo Consumer (ToC) シナリオに適しています。ルート認証とコンシューマー認証は、パートナーに API 操作の権限を付与するなどのTo Business (ToB) シナリオに適しています。

項目

グローバル認証

ルート認証とコンシューマー認証

シナリオ

集中ログオン認証などのToC シナリオ。

パートナーに API 操作の権限を付与するなどのToB シナリオ。

主な違い

認証を有効にすると、認証も有効になります。

認証を有効にした後、認証設定を行う必要があります。

エントリ ポイント

Security Management > Global Authentication

  1. Routes > Policies > Authentication

  2. Security Management > Consumer Authentication

JSON Web Token ( JWT ) に基づく認証の設定

  1. 認証ルールを作成する際に、グローバル JWKS 設定を入力します。

  2. JWT の検証に使用する Issue フィールドと Sub フィールドを指定します。

  1. コンシューマーを作成する際に、コンシューマーの JWKS 設定を入力します。

  2. JWT ペイロード セクションのコンシューマー ID フィールドで、コンシューマーの識別に使用するキーと値のペアを指定します。デフォルトでは、payload 内の uid の値が使用されます。ビジネス要件に基づいてキーと値のペアを指定できます。

認証設定

認証ルールを作成する際に、ホワイトリストまたはブラックリストを選択し、Domain Name フィールドと Path フィールドを指定します。

  • BlacklistDomain NamePath がブラックリストに含まれているコンシューマーは認証する必要があります。その他のコンシューマーは認証する必要はありません。

  • WhitelistDomain NamePath がホワイトリストに含まれているコンシューマーは認証する必要はありません。その他のコンシューマーは認証する必要があります。

  1. Policies ページで、ルートの Authentication を有効にします。

  2. Consumer Authentication ページで、認証が有効になっているルートをコンシューマーに関連付けて、認証を完了します。

コンシューマーの作成

  1. MSE コンソール にログオンします。上部のナビゲーション バーで、リージョンを選択します。

  2. 左側のナビゲーション ペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。

  3. ゲートウェイリスト ページで、ゲートウェイの名前をクリックします。

  4. 左側のナビゲーション ペインで、Security Management > Consumer Authentication を選択します。

  5. Create Consumer をクリックします。

  6. パラメーターを設定し、OK をクリックします。

    创建消费者.png

    次の表にパラメーターを示します。

    パラメーター

    説明

    Consumer Name

    コンシューマーの名前。

    Consumer Description

    コンシューマーの説明。

    Authentication Type

    コンシューマーでサポートされている認証方法。

    Key Type

    • Symmetric Key:コンシューマーに基づいて変化するデフォルトの JWKS が生成されます。デフォルトの JWKS には、トークンの暗号化または復号化に使用するキーが含まれています。

    • Asymmetric Key:完全な JWKS 設定を入力する必要があります。トークンは秘密キーを使用して暗号化されます。ゲートウェイは JWKS の公開キーに基づいて復号化を実行します。

    JWKS

    JWKS 設定を入力します。JWKS の仕様の詳細については、「JSON Web Key ( JWK )」をご参照ください。

    JWT Token

    JWT トークンを設定します。

    • Type:トークンのタイプ。デフォルト値は HEADER です。

    • Key:トークンの名前。

    • Prefix:トークンのプレフィックス。トークンを検証するために必要なパラメーターを設定します。デフォルトでは、トークンには Bearer プレフィックスが含まれており、Authorization ヘッダーに格納されています。例:Authorization: Bearer <token>

    • Enable Passthrough:このオプションを選択すると、トークンはバックエンド サービスに渡されます。

    Consumer Identity in JWT Payload

    コンシューマーの識別に使用する JWT ペイロード内のキーと値。デフォルトでは、キーは uid で、値はランダムな文字列です。ビジネス要件に基づいて値を変更できます。

    次のコードは、前の図の設定に基づいてコンシューマーが作成された場合の JWT トークンのペイロードです。

    {
      "uid": "11215ac069234abcb8944232b79ae711"
    }

トークン生成方法

このセクションでは、Java でトークンを生成する例を示します。他のプログラミング言語では、関連ツールを使用してキーペアを生成できます。

Maven プロジェクトを作成し、次の依存関係をプロジェクトに追加します。

<dependency>
    <groupId>org.bitbucket.b_c</groupId>
    <artifactId>jose4j</artifactId>
    <version>0.7.0</version>
</dependency>

デフォルトの対称キーを使用してトークンを生成する

コードを表示

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        // 前述の例を使用します。
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        // 有効期限を指定します。7 日未満にする必要があります。
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        // カスタム パラメーターを追加します。すべてのパラメーター値は STRING 型である必要があります。
        // コンシューマー ID を設定します。
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        // 暗号化アルゴリズムを指定します。
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

コードの設定:

  • privateKeyJson 設定では、コンシューマーの作成時に使用する JWKS を指定します。コンシューマーの作成時に JWKS を記録するか、コンシューマーの作成後にコンシューマーの基本設定ページから JWKS を取得できます。

    消费者.png

  • コンシューマー ID を設定します。claims.setClaim("uid", "11215ac069234abcb8944232b79ae711") 設定では、コンシューマー ID を指定します。コンシューマーの作成時にコンソールによって自動的に生成されます。ロジックに基づいてコンシューマー ID を変更できます。

    消费者标识.png

    コンシューマーの作成後に、コンシューマーの基本設定ページでコンシューマー ID を取得することもできます。获取消费者标识.png

  • 暗号化アルゴリズムを設定します。jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256) 設定では、暗号化アルゴリズムを指定します。これは JWKS と一致している必要があります。

    説明

    次の暗号化アルゴリズムがサポートされています:ES256、ES384、ES512、RS256、RS384、RS512、PS256、PS384、PS512、HS256、HS384、HS512、EdDSA。

    加密算法.png

    対称暗号化を使用する場合は、「k」をデコードする必要があります。

    jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
  • 有効期限を設定します。有効期限は 7 日未満にする必要があります。有効期限に達した後は、セキュリティを確保するために新しいトークンを生成することをお勧めします。

    ...
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
    ...
  • ビジネス要件に基づいて、JWKS PAYLOAD にカスタム パラメーターを追加できます。

非対称キーを使用してトークンを生成する

コードを表示

package org.example;

import java.io.UnsupportedEncodingException;
import java.security.PrivateKey;

import org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.OctJwkGenerator;
import org.jose4j.jwk.OctetSequenceJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.keys.HmacKey;
import org.jose4j.lang.JoseException;
import sun.lwawt.macosx.CSystemTray;

public class Main {
    public static void main(String[] args) throws JoseException, UnsupportedEncodingException {
        // 前述の例を使用します。
        String privateKeyJson = "{\n"
                + "    \"k\": \"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY\",\n"
                + "    \"kty\": \"oct\",\n"
                + "    \"alg\": \"HS256\",\n"
                + "}";
        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        // 有効期限を指定します。7 日未満にする必要があります。
        NumericDate date = NumericDate.now();
        date.addSeconds(120*60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        // カスタム パラメーターを追加します。すべてのパラメーター値は STRING 型である必要があります。
        // コンシューマー ID を設定します。
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");
        JsonWebSignature jws = new JsonWebSignature();
        // 暗号化アルゴリズムを設定します。
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
        jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));
        jws.setPayload(claims.toJson());
        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

コードの設定:

  • privateKeyJson パラメーター、コンシューマー ID、および有効期限は、対称暗号化アルゴリズムを使用する場合と同じように設定します。

  • jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256) 設定では、暗号化アルゴリズムを指定します。暗号化アルゴリズムは JWKS と一致している必要があります。

    非対称暗号化アルゴリズムを使用する場合は、暗号化に秘密キーが必要です。

    ...
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
        PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyJson)).getPrivateKey();
        jws.setKey(privateKey);
    ...
  • ビジネス要件に基づいて、JWKS PAYLOAD にカスタム パラメーターを追加できます。

ルート認証を有効にする

  1. MSE コンソール にログオンします。上部のナビゲーション バーで、リージョンを選択します。

  2. 左側のナビゲーション ペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。

  3. ゲートウェイリスト ページで、ゲートウェイの名前をクリックします。

  4. 左側のナビゲーション ペインで、Routes をクリックし、[ルート] タブをクリックします。

  5. 目的のルートを見つけ、Actions 列の Policies をクリックします。

  6. Policies ページで、Authentication タブをクリックします。次に、パラメーターを設定し、[保存] をクリックします。

    パラメーター

    説明

    [認証タイプ]

    コンシューマーがルートにアクセスする前にコンシューマーを認証するために使用される方法。

    [有効]

    認証を有効にするかどうかを指定します。スイッチをオンにすると、認証が有効になります。

ルートへのアクセスをコンシューマーに許可する

  1. MSE コンソール にログオンします。上部のナビゲーション バーで、リージョンを選択します。

  2. 左側のナビゲーション ペインで、Cloud-Native Gateway > ゲートウェイリスト を選択します。

  3. ゲートウェイリスト ページで、ゲートウェイの名前をクリックします。

  4. 左側のナビゲーション ペインで、Security Management > Consumer Authentication を選択します。

  5. 目的のコンシューマーを見つけ、AuthorizationActions 列の . をクリックします。

  6. Consumer Authorization タブで、Associate Route をクリックし、コンシューマーにアクセス権限を付与するルートを選択して、OK をクリックします。