クライアント ID 適用ポリシー

ポリシー名

クライアント ID 適用

概要

承認されたクライアントアプリケーションへのアクセスのみを許可する

カテゴリ

コンプライアンス

使用可能な最小 Flex Gateway バージョン

v1.0.0

返される状況コード

401 - 未承認または無効なクライアントアプリケーションのログイン情報

500 - 認証サーバーからの不正応答、または WSDL SOAP 失敗エラー

概要

クライアント ID 適用ポリシーは、登録済みクライアントアプリケーションからの要求のみを許可することで、保護されたリソースへのアクセスを制限します。このポリシーは、各要求で送信されるクライアントのログイン情報が API のコンシュームを承認されていることを確認します。

クライアントアプリケーションが Anypoint Platform に登録されると、クライアント ID とクライアントシークレットで構成されるログイン情報のペアが生成されます。クライアントアプリケーションが API へのアクセスを要求したときに、アプリケーションとその API 間のコントラクトが作成されます。クライアント ID 適用ポリシーで保護されている API は、承認されたコントラクトを持つアプリケーションのみからアクセスできます。

クライアント ID 適用ポリシーを適用すると、Analytics イベントと共にクライアント ID を報告することで、API へのアクセスが追跡されます。

クライアントアプリケーションのログイン情報を内部に適用するデフォルトポリシーは次のとおりです。

トークン適用ポリシーは、必要に応じてクライアント検証をスキップできますが、トークンが承認されたコントラクトに関連付けられていることを確認するために検証を実施することをお勧めします。

ポリシーのパラメーターの設定

Flex Gateway のローカルモード

クライアント ID 適用ポリシーは、ローカルモードではサポートされません。

管理 Flex Gateway および Flex Gateway の接続モード

UI からポリシーを API インスタンスに適用するときに、以下のパラメーターが表示されます。

パラメーター 説明 必須

Credentials origin (ログイン情報の取得元)

要求のどこから値を抽出するかを指定します。

  • HTTP Basic Authentication Header (HTTP 基本認証ヘッダー): 認証ヘッダーの一部としてログイン情報が必要です。API をコンシュームするアプリケーションは、基本認証スキームを使用して要求でログイン情報を送信する必要があります。

  • Custom Expression (カスタム式): 各クライアント ID とクライアントシークレットの DataWeave 2.0 式を受け入れ、要求からログイン情報を抽出する場所を示します。ログイン情報をカスタムヘッダーまたはその他の形式で送信する場合、このオプションを使用します。クライアントシークレットの要件を省略可能として設定する場合、この項目は空白のままにできます。

いずれかのオプションを選択する必要があります。

Client ID Expression (クライアント ID 式)

API 要求からクライアント ID を取得するために使用する DataWeave 2.0 式。

はい。

Client Secret Expression (クライアントシークレット式)

API 要求からクライアントシークレットを取得するために使用する DataWeave 2.0 式。

いいえ。

ポリシーのしくみ

クライアントアプリケーションがクライアント ID 適用ポリシーで保護された API をコンシュームできるようになる前に、クライアントアプリケーションは API へのアクセスを要求する必要があります。クライアントアプリケーションと API 間に承認されたコントラクトが存在する場合、ポリシーの設定方法に準拠したクライアントアプリケーションのログイン情報がすべての要求に含まれている必要があります。

たとえば、クエリパラメーターとしてクライアント ID とクライアントシークレットを必要とするポリシーが設定されている場合、アプリケーションは要求でそれらのログイン情報を送信する必要があります。これを適用するには、API 仕様に ​client-id-required​ RAML trait を追加します。

traits:
  client-id-required:
    queryParameters:
      client_id:
        type: string
      client_secret:
        type: string

is​ RAML 属性を使用して、trait をリソースまたはメソッドに適用します。

/example:
  get:
    is: [client-id-required]
    description: Example description

ポリシーがログイン情報を取得する方法の設定

さまざまなカスタム DataWeave 2.0 式を使用して、HTTP 要求からクライアント ID とクライアントシークレットの両方、またはクライアント ID のみを抽出するようにポリシーを設定できます。次の例では、「1234」のクライアント ID と「abcd」のクライアントシークレットを使用しています。

HTTP ヘッダーを使用したログイン情報の取得

curl を使用する要求の例:

curl "http://localhost/myResource" -H "client_id:1234" -H "client_secret:abcd"

ポリシーの設定時に使用される DataWeave 2.0 式の例:

#[attributes.headers['client_id']]
#[attributes.headers['client_secret']]

この例では、client_id と client_secret の 2 つのヘッダー、およびログイン情報のペアを必要とするポリシーが設定されています。このポリシーは、他の種別のヘッダーも許可する柔軟性があります。これがポリシーのデフォルト設定です。

HTTP クエリパラメーターを使用したログイン情報の取得

curl を使用する要求の例:

curl "http://localhost/myResource?client_id=1234&client_secret=abcd"

ポリシーの設定時に使用される DataWeave 2.0 式の例:

#[attributes.queryParams.'client_id']
#[attributes.queryParams.'client_secret']

この例では、リクエスターは指定された 2 つのクエリパラメーターを要求と共に送信する必要があります。これはサポートされている設定ですが、セキュリティリスクが発生する可能性があります。ヘッダーを使用する方法をお勧めします。DataWeave 2.0 の​一部​がサポートされています。

HTTP 要求ペイロードを使用したログイン情報の取得

curl を使用する要求の例:

curl "http://localhost/myResource" -d '{"client_id":"1234", "client_secret":"abcd"}' -X POST

ポリシーの設定時に使用される DataWeave 2.0 式の例:

#[payload.client_id]
#[payload.client_secret]

要求ペイロードからログイン情報を取得するようにポリシーを設定できますが、この方法は API 仕様に反映させることが難しいため、お勧めしません。

基本認証ヘッダーを使用したログイン情報の取得

curl を使用する要求の例:

curl "http://localhost/myResource" -u 1234:abcd

API 仕様の設定

クライアント ID 適用ポリシーでは、ログイン情報の要件を実装するために API 仕様を変更する必要があります。 対応するポリシーの API 仕様に追加する必要がある RAML または OAS コードが含まれる、RAML または OAS スニペットリンクがあります。このコードには、API Manager で API 仕様の [Policies (ポリシー)] タブにある適用済みポリシーのリストからアクセスできます。

ポリシーの出力

クライアント ID 適用ポリシーが適用されていて、クライアントアプリケーションのログイン情報が無効または未承認の場合、保護されるリソースに対して HTTP 要求が実行されると、HTTP 応答に WWW Authenticate ヘッダーと次の値が含まれます。

カスタムモード

ヘッダー 'WWW-Authenticate'='Client-ID-Enforcement'

基本認証モード

ヘッダー 'WWW-Authenticate'='Basic realm="mule-realm"

SOAP アプリケーションの場合、応答は SOAP エラーです。