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

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

最終更新日:Jun 21, 2026

クラウドネイティブゲートウェイでは、ルートの認証を設定し、特定のコンシューマーにそのルートへのアクセスを認可できます。このトピックでは、コンシューマー認証の設定方法について説明します。

背景情報

グローバル認証は、統一ログインなどの ToC シナリオに適しています。コンシューマー認可を伴うルート認証は、パートナーへの API アクセス権限の付与などの ToB シナリオにより適しています。

比較項目

グローバル認証

ルート認証 + コンシューマー認可

シナリオ

統一ログイン認証などの ToC シナリオ。

パートナーへの API アクセス権限の付与などの ToB シナリオ。

主な違い

認証と認可が同時に有効になります。

認証を有効化した後、認可を個別に設定する必要があります。

設定エントリ

Security Management > Global Authentication

  1. Routes > Policies > Authentication

  2. Security Management > Consumer Authentication

認証の設定 (JWT を例として)

  1. 設定の作成時に、グローバルの JWKS 設定を入力します。

  2. iss および sub フィールドを JWT トークンの検証条件として入力します。

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

  2. コンシューマー ID を入力し、JWT がこのコンシューマーに属しているかどうかを識別します。デフォルトでは、payload フィールドの uid が使用されますが、カスタマイズすることも可能です。

認可の設定

設定の作成時に、ブラックリストまたはホワイトリスト用の Domain Name および Path のリストを入力します。

  • Blacklist: リスト内の Domain Name および Path は認証が必要で、それ以外は認証なしで直接アクセスできます。

  • Whitelist: リスト内の Domain Name および Path エントリは認証が不要です。それ以外は認証が必要です。

  1. ルートの Policies で、そのルートの Authentication を有効化します。

  2. Consumer Authentication で、認証を有効化したルートを関連付けて認可を完了します。

コンシューマーの作成

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

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

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

  4. 左側メニューで、Security Management > Consumer Authentication の順にクリックします。

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

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

    次の表は、各パラメーターの説明です。

    設定項目

    説明

    Consumer Name

    コンシューマーのカスタム名を入力します。

    Consumer Description

    コンシューマーの説明を入力します。

    Authentication Type

    コンシューマーがサポートする認証方法を指定します。

    Key Type

    • Symmetric Key: トークンの暗号化または復号化に使用されるキーを含む、デフォルトの JWKS 設定 (コンシューマーごとに一意) を生成します。

    • Asymmetric Key: 完全な JWKS 設定を指定する必要があります。プライベートキーを使用してトークンに署名します。ゲートウェイは、指定された JWKS のパブリックキーを使用してトークンを検証します。

    JWKS

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

    JWT Token

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

    • Type: トークンパラメーターのタイプを指定します。デフォルトは Header です。

    • Key: トークンパラメーターの名前を指定します。

    • Prefix: トークンパラメーター名のプレフィックスを指定します。デフォルトでは、トークンは Authorization ヘッダー内で、プレフィックス Bearer を付けて検証されます。例: 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 org.jose4j.base64url.Base64;
import org.jose4j.json.JsonUtil;
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;

public class Main {
    public static void main(String[] args) throws JoseException {
        // コンシューマー作成時に生成された JWKS を使用
        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);
        // カスタムクレームを追加。文字列値のみを使用してください
        // コンシューマー識別子を設定
        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 です。この値は作成時に記録するか、後でコンシューマー詳細ページの [Basic Settings] タブにある [Authentication Configuration] セクションから取得できます。

  • コンシューマー識別子は claims.setClaim("uid", "11215ac069234abcb8944232b79ae711") で設定します。これは、コンソールで生成されたデフォルトのコンシューマー ID と一致しますが、カスタマイズも可能です。現在の値は、コンシューマー詳細ページの [Basic Settings] タブにある [Authentication Configuration][Consumer Identifier] フィールドで確認できます。

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

    説明

    サポートされているアルゴリズムには、ES256、ES384、ES512、RS256、RS384、RS512、PS256、PS384、PS512、HS256、HS384、HS512、および EdDSA があります。

    [Key Type][Symmetric key] を選択する場合、次のキープロパティを持つ JWKS を入力します: "kty":"oct""k":"VoBG-oyqVoyCr9G56ozmq8n_rlDDyYMQOd_DO4GOkEY"、および "alg":"HS256"

    対称暗号化の場合、"k" 値をデコードします。

    jws.setKey(new HmacKey(Base64.decode(JsonUtil.parseJson(privateKeyJson).get("k").toString())));

    コンシューマー識別子は、コンシューマー詳細ページの [Basic Settings] タブにある [Authentication Configuration][Consumer Identifier] フィールドからも取得できます。

  • 有効期限を設定します。7 日未満に設定する必要があります。セキュリティを維持するため、有効期限が切れた後は新しいトークンを生成してください。

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

非対称キーを使用したトークンの生成

コードを表示するには展開してください

package org.example;

import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.lang.JoseException;
import java.security.PrivateKey;

public class Main {
    public static void main(String[] args) throws JoseException {
        // JWKS 形式の RSA プライベートキーの例
        // 実際のキーに置き換えてください
        String privateKeyJson = "{\n"
                + "    \"kty\": \"RSA\",\n"
                + "    \"n\": \"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM7DBGMtZ_c--_v4O5_Nrd_c9z-i-2t_a_t_a_t_a\",\n"
                + "    \"e\": \"AQAB\",\n"
                + "    \"d\": \"X4cTteJY_gn4Fv2xCx7xBW2VzX_1gJ2d-4b_4-g-4t_a-g-a_4t_a\",\n"
                + "    \"p\": \"83i-7137s8-7137s8-7137s8-7137s8-7137s8-7137s8-7137s8-7\",\n"
                + "    \"q\": \"3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3_3-3\",\n"
                + "    \"dp\": \"d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d_d-d\",\n"
                + "    \"dq\": \"c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c_c-c\",\n"
                + "    \"qi\": \"b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b_b-b\",\n"
                + "    \"alg\": \"RS256\"\n"
                + "}";

        JwtClaims claims = new JwtClaims();
        claims.setGeneratedJwtId();
        claims.setIssuedAtToNow();
        // 有効期限を設定 (7 日未満である必要があります)
        NumericDate date = NumericDate.now();
        date.addSeconds(120 * 60);
        claims.setExpirationTime(date);
        claims.setNotBeforeMinutesInThePast(1);
        // カスタムクレームを追加。文字列値のみを使用してください
        // コンシューマー識別子を設定
        claims.setClaim("uid", "11215ac069234abcb8944232b79ae711");

        JsonWebSignature jws = new JsonWebSignature();
        // ペイロードを設定
        jws.setPayload(claims.toJson());
        
        // プライベートキーをロード
        PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyJson)).getPrivateKey();
        jws.setKey(privateKey);

        // 暗号化アルゴリズムを設定
        jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);

        String jwtResult = jws.getCompactSerialization();
        System.out.println("Generate Json Web token , result is \n " + jwtResult);
    }
}

コード設定の注意事項:

  • privateKeyJson、コンシューマー識別子、および有効期限については、対称暗号化の説明と同様に設定します。

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

    コンソールの [JWKS] 設定フィールドに、キータイプ (kty) が RSA である JSON 形式の非対称キーを入力します。pqde などの標準的な RSA パラメーターを含め、eAQAB に設定します。[JWT Token] 設定セクションで、Type を [HEADER][Key]Authorization、Prefix を Bearer に設定し、[Pass-through] にチェックを入れます。

    非対称暗号化の場合、プライベートキーでトークンに署名します。

    ...
        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 をクリックします。設定後、保存 をクリックします。

    パラメーター

    説明

    [Authentication Method]

    このルートで使用する認証方法を選択します。

    [Enabling Status]

    有効にすると、認証と認可が有効になります。

コンシューマーへのアクセス権限の付与

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

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

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

  4. 左側メニューで、Security Management > Consumer Authentication の順にクリックします。

  5. 対象のコンシューマーの Actions 列で、Authorization をクリックします。

  6. Consumer Authorization タブで、Associate Route をクリックし、このコンシューマーに認可するルートを選択してから、OK をクリックします。