---
schema_version: "1"
id: 1c06f066b02d3def5a90c570bf1d6d4722f0b7a6563dfbc86476a910d8a549c0
title: クライアント ID 適用ポリシー
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/gateway/1.8/policies-included-client-id-enforcement.md
canonical_url: https://docs.mulesoft.com/jp/gateway/1.8/policies-included-client-id-enforcement
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 2c71c3820ea9da41c508addaae0ba55224efe7e8b38e0e7ace7c98086d882880
description: MuleSoft Documentation Site
release: "1.8"
latest: false
---
# クライアント ID 適用ポリシー

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 25%;">
<col style="width: 75%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>ポリシー名</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">クライアント ID 適用</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>概要</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">承認されたクライアントアプリケーションへのアクセスのみを許可する</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>カテゴリ</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">コンプライアンス</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>使用可能な最小 Flex Gateway バージョン</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">v1.0.0</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-middle" rowspan="4"><p class="tableblock"><strong>返される状況コード</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">401 - 未承認または無効なクライアントアプリケーションのログイン情報</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">500 - 認証サーバーからの不正応答、または WSDL SOAP 失敗エラー</p></td>
</tr>
</tbody>
</table>

## [](#概要)概要

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

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

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

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

- [レート制限: SLA ベースのポリシー](https://docs.mulesoft.com/jp/gateway/1.8/policies-included-rate-limiting-sla)
- [OpenID Connect OAuth 2.0 トークン適用ポリシー](https://docs.mulesoft.com/jp/gateway/1.8/policies-included-openid-token-enforcement)
- [JWT 検証ポリシー](https://docs.mulesoft.com/jp/gateway/1.8/policies-included-jwt-validation)

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

## [](#ポリシーのパラメーターの設定)ポリシーのパラメーターの設定

### [](#flex-gateway-のローカルモード)Flex Gateway のローカルモード

Client ID 適用ポリシーは、ローカルモードではサポートされません。

### [](#flex-gateway-の接続モード)Flex Gateway の接続モード

#### [](#パラメーターの設定)パラメーターの設定

次のパラメーターが表示されます。

<table class="tableblock frame-all grid-all fit-content spread">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">説明</th>
<th class="tableblock halign-left valign-top">必須</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Credentials origin (ログイン情報の取得元)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>要求のどこから値を抽出するかを指定します。</p>
</div>
<div class="ulist">
<ul>
<li>
<p>HTTP Basic Authentication Header (HTTP 基本認証ヘッダー): 認証ヘッダーの一部としてログイン情報が必要です。API をコンシュームするアプリケーションは、基本認証スキームを使用して要求でログイン情報を送信する必要があります。</p>
</li>
<li>
<p>Custom Expression (カスタム式): 各クライアント ID とクライアントシークレットの DataWeave 2.0 式を受け入れ、要求からログイン情報を抽出する場所を示します。ログイン情報をカスタムヘッダーまたはその他の形式で送信する場合、このオプションを使用します。クライアントシークレットの要件を省略可能として設定する場合、この項目は空白のままにできます。</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いずれかのオプションを選択する必要があります。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Client ID Expression (クライアント ID 式)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API 要求からクライアント ID を取得するために使用する DataWeave 2.0 式。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>はい。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Client Secret Expression (クライアントシークレット式)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API 要求からクライアントシークレットを取得するために使用する DataWeave 2.0 式。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いいえ。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Method &amp; Resource conditions (メソッドとリソースの条件): Apply configurations to all API methods &amp; resources (設定をすべての API メソッドおよびリソースに適用)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API に関連付けられたすべてのメソッドとリソースにポリシーを適用する必要がある場合、このオプションを選択します。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いずれかのオプションを選択する必要があります。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Method &amp; Resource conditions (メソッドとリソースの条件): Apply Configurations to Specific Methods &amp; Resources (特定のメソッドとリソースに設定を適用)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API に関連付けられた特定のメソッドとリソースにポリシーを適用する必要がある場合、このオプションを選択します。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いずれかのオプションを選択する必要があります。</p>
</div></div></td>
</tr>
</tbody>
</table>

#### [](#anypoint-service-mesh-非-mule-アプリケーション-のパラメーターの設定)Anypoint Service Mesh (非 Mule アプリケーション) のパラメーターの設定

Anypoint Service Mesh (非 Mule アプリケーション) の場合、クライアント ID 適用ポリシーを同じ方法で設定しますが、次の違いがあります。

<table class="tableblock frame-all grid-all fit-content spread">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">要素</th>
<th class="tableblock halign-left valign-top">説明</th>
<th class="tableblock halign-left valign-top">必須</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Credentials origin (ログイン情報の取得元)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>要求のどこから値を抽出するかを指定します。</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>client_id</code>​ および ​<code>client_secret</code>​ ヘッダー:</p>
</li>
<li>
<p>HTTP Basic Authentication Header (HTTP 基本認証ヘッダー): 認証ヘッダーの一部としてログイン情報が必要です。API をコンシュームするアプリケーションは、基本認証スキームを使用して要求でログイン情報を送信する必要があります。</p>
</li>
<li>
<p>Custom Headers (カスタムヘッダー): 各クライアント ID とクライアントシークレットのヘッダー名を受け入れ、要求からログイン情報を抽出するヘッダーを示します。ログイン情報をカスタムヘッダーに送信する場合、このオプションを使用します。</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いずれかのオプションを選択する必要があります。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Client ID Header (クライアント ID ヘッダー)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API 要求からクライアント ID を抽出するために使用されるヘッダー名。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>はい。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Client Secret Header (クライアントシークレットヘッダー)</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>API 要求からクライアントシークレットを抽出するために使用されるヘッダー名。</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>いいえ。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#ポリシーのしくみ)ポリシーのしくみ

クライアントアプリケーションがクライアント 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-ヘッダーを使用したログイン情報の取得)HTTP ヘッダーを使用したログイン情報の取得

curl を使用する要求の例:

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

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

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

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

### [](#http-クエリパラメーターを使用したログイン情報の取得)HTTP クエリパラメーターを使用したログイン情報の取得

curl を使用する要求の例:

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

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

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

この例では、リクエスターは指定された 2 つのクエリパラメーターを要求と共に送信する必要があります。これはサポートされている設定ですが、セキュリティリスクが発生する可能性があります。ヘッダーを使用する方法をお勧めします。DataWeave 2.0 の​[一部](https://docs.mulesoft.com/jp/gateway/1.8/policies-flex-dataweave-support)​がサポートされています。

### [](#http-要求ペイロードを使用したログイン情報の取得)HTTP 要求ペイロードを使用したログイン情報の取得

curl を使用する要求の例:

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

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

```text
#[payload.client_id]
#[payload.client_secret]
```

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

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

curl を使用する要求の例:

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

## [](#api-仕様の設定)API 仕様の設定

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

## [](#ポリシーの出力)ポリシーの出力

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

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 2.7777%;">
<col style="width: 97.2223%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>カスタムモード</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ヘッダー 'WWW-Authenticate'='Client-ID-Enforcement'</p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>基本認証モード</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ヘッダー 'WWW-Authenticate'='Basic realm="mule-realm"</p></td>
</tr>
</tbody>
</table>

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

## [](#関連情報)関連情報

- [API Manager における API インスタンスコントラクトの管理](https://docs.mulesoft.com/jp/api-manager/latest/manage-client-apps-latest-task)
- [登録済みクライアントアプリケーションのクライアント ID とクライアントシークレットの取得](https://docs.mulesoft.com/jp/api-manager/latest/access-client-app-id-task)
- [SLA 層の概念の確認](https://docs.mulesoft.com/jp/api-manager/latest/defining-sla-tiers)