クラウドネイティブゲートウェイでは、ルートの認証を設定し、特定のコンシューマーにそのルートへのアクセスを認可できます。このトピックでは、コンシューマー認証の設定方法について説明します。
背景情報
グローバル認証は、統一ログインなどの ToC シナリオに適しています。コンシューマー認可を伴うルート認証は、パートナーへの API アクセス権限の付与などの ToB シナリオにより適しています。
|
比較項目 |
グローバル認証 |
ルート認証 + コンシューマー認可 |
|
シナリオ |
統一ログイン認証などの ToC シナリオ。 |
パートナーへの API アクセス権限の付与などの ToB シナリオ。 |
|
主な違い |
認証と認可が同時に有効になります。 |
認証を有効化した後、認可を個別に設定する必要があります。 |
|
設定エントリ |
Security Management > Global Authentication |
|
|
認証の設定 (JWT を例として) |
|
|
|
認可の設定 |
設定の作成時に、ブラックリストまたはホワイトリスト用の Domain Name および Path のリストを入力します。
|
|
コンシューマーの作成
MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。
-
ゲートウェイリスト ページで、対象のゲートウェイの ID をクリックします。
-
左側メニューで、Security Management > Consumer Authentication の順にクリックします。
-
Create Consumer ボタンをクリックします。
-
パラメーターを設定し、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>
デフォルトの対称キーを使用したトークンの生成
コード設定の注意事項:
-
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にカスタムパラメーターを追加できます。
非対称キーを使用したトークンの生成
コード設定の注意事項:
-
privateKeyJson、コンシューマー識別子、および有効期限については、対称暗号化の説明と同様に設定します。 -
暗号化アルゴリズムは
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256)で設定します。これは、JWKS のアルゴリズムと一致する必要があります。コンソールの [JWKS] 設定フィールドに、キータイプ (
kty) がRSAである JSON 形式の非対称キーを入力します。p、q、d、eなどの標準的な RSA パラメーターを含め、eをAQABに設定します。[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にカスタムパラメーターを追加できます。
ルート認証の有効化
MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。
ゲートウェイリスト ページで、ゲートウェイの名前をクリックします。
左側のナビゲーションウィンドウで、Routes をクリックし、[ルート] タブをクリックします。
-
対象のルートの Actions 列で、Policies をクリックします。
-
Policies タブで、Authentication をクリックします。設定後、保存 をクリックします。
パラメーター
説明
[Authentication Method]
このルートで使用する認証方法を選択します。
[Enabling Status]
有効にすると、認証と認可が有効になります。
コンシューマーへのアクセス権限の付与
MSE コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。
ゲートウェイリスト ページで、ゲートウェイの名前をクリックします。
-
左側メニューで、Security Management > Consumer Authentication の順にクリックします。
-
対象のコンシューマーの Actions 列で、Authorization をクリックします。
-
Consumer Authorization タブで、Associate Route をクリックし、このコンシューマーに認可するルートを選択してから、OK をクリックします。