---
schema_version: "1"
id: 6af6bc58cfaedd294def43b90ee8cc2f55c3365a70fc12f1d8cf0f736d956ad9
title: OpenID Connect OAuth 2.0 トークン適用ポリシー
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/gateway/1.8/policies-included-openid-token-enforcement.md
canonical_url: https://docs.mulesoft.com/jp/gateway/1.8/policies-included-openid-token-enforcement
source_site: docs.mulesoft.com
content_type: documentation
content_hash: c0a15d52a9797a69e8b02720607d9eaa0d32eb7c95fd081097e312281bc3f07f
description: MuleSoft Documentation Site
release: "1.8"
latest: false
---
# OpenID Connect OAuth 2.0 トークン適用ポリシー

<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">OpenID Connect OAuth 2.0 トークン適用</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">400 - 無効なトークン</p></td>
</tr>
<tr>
<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">403 - アクセス拒否、無効なクライアントアプリケーションログイン情報</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">500 - 認証サーバーからの不正応答</p></td>
</tr>
</tbody>
</table>

## [](#概要)概要

OpenID Connect アクセストークン適用ポリシーは、保護されたリソースへのアクセスを、API アクセス権を持つクライアントアプリケーションに属する有効な Oauth2 トークンを提供する HTTP 要求に制限します。このポリシーはトークンを生成せず、トークンを検証するだけです。

このポリシーは、​[クライアント管理ソリューション](https://docs.mulesoft.com/jp/access-management/configure-client-management-openid-task)​として OpenID Connect 動的クライアント登録を使用するように設定されている組織でのみ使用できます。

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

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

ローカルモードでは、宣言型の設定ファイルを使用して OpenID Connect アクセストークン適用ポリシーを API に適用します。以下のポリシー定義とパラメーターの表を参照してください。

\- policyRef:
    name: openidconnect-access-token-enforcement-flex
  config:
    authenticationTimeout: <int> // OPTIONAL, default: 10000
    scopes: <string> // OPTIONAL, default: ""
    secureTrustStore: <bool> // OPTIONAL, default: false
    scopeValidationCriteria: <string> // OPTIONAL, default: "AND"
    exposeHeaders: <bool> // OPTIONAL, default: false
    skipClientIdValidation: <bool> // OPTIONAL, default: true
    maxFederationExpirationTime: <int> // OPTIONAL, default: -1
    maxCacheSize: <int> // OPTIONAL, default: 1000

<table class="tableblock frame-all grid-all fit-content spread">
<colgroup>
<col>
<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>
<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><code>authenticationTimeout</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>10000</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>scopes</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>空の文字列</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>サポートされるスコープのスペース区切りリスト: <code>read</code> ​<code>write</code>​</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>secureTrustStore</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>false</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>scopeValidationCriteria</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>"AND"</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>トークンに定義済みのすべてのスコープが含まれる必要があるか、1 つのみ含まれる必要があるかを決定します。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>exposeHeaders</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>false</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>プロキシのシナリオで、バックエンドへの要求でヘッダーを公開する必要があるかどうかを指定します。統合サーバーによって返されるユーザープロパティは、「X-AGW-」というプレフィックスが付けられ、ヘッダーとしてバックエンドに送信されます。</p>
</div>
<div class="paragraph">
<p>このパラメーターについての詳細は、​<a href="#leveraging-TVE-information">「トークン検証エンドポイント情報の活用」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>skipClientIdValidation</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>true</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>クライアントアプリケーションの API コントラクト検証をスキップします。​<code>true</code>​ の場合、​<a href="#how-this-policy-works">「ポリシーのしくみ」</a>​セクションの図のステップ 4 がスキップされます。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>maxFederationExpirationTime</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>-1</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>最大有効期限 (秒)。</p>
</div>
<div class="paragraph">
<p>このパラメーターの詳細は、​<a href="#token-caching">「トークンキャッシュ」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>maxCacheSize</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>省略可能</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>1000</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>キャッシュするトークンの数。</p>
</div>
<div class="paragraph">
<p>このパラメーターの詳細は、​<a href="#token-caching">「トークンキャッシュ」</a>​を参照してください。</p>
</div></div></td>
</tr>
</tbody>
</table>

#### [](#リソースの設定例)リソースの設定例

\- policyRef:
    name: openidconnect-access-token-enforcement-flex
  config:
    authenticationTimeout: 10000
    scopes: read write
    secureTrustStore: false
    scopeValidationCriteria: OR
    exposeHeaders: true
    skipClientIdValidation: false

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

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

#### [](#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"><p class="tableblock">Scopes (スコープ)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">サポートされるスコープのカンマ区切りリストを表示します。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">READ, WRITE, READ and WRITE</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Scope Validation Criteria (スコープ検証条件)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">トークンに定義済みのすべてのスコープが含まれる必要があるか、1 つのみ含まれる必要があるかを決定します。
この値は、​<code>Contains all scopes</code>​ と ​<code>Contains any scope</code>​ です。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">[Contains all scopes (すべてのスコープを含む)] 値が選択されている場合、スコープ ​<code>READ</code>​ と ​<code>WRITE</code>​ を持つトークンが受け入れられます。[Contains any scopes (任意のスコープを含む)] 値が選択されている場合、スコープ ​<code>READ, WRITE, and READ AND WRITE</code>​ を持つトークンが受け入れられます。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Expose Headers (ヘッダーを公開)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">プロキシのシナリオで、バックエンドへの要求でヘッダーを公開する必要があるかどうかを指定します。統合サーバーによって返されるユーザープロパティは、「X-AGW-」というプレフィックスが付けられ、ヘッダーとしてバックエンドに送信されます。</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Skip Client Id Validation (クライアント ID 検証をスキップ)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">クライアントアプリケーションの API コントラクト検証をスキップします。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択した場合、​<a href="#how-this-policy-works">「ポリシーのしくみ」</a>​セクションの図のステップ 4 がスキップされます。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Authentication request timeout (認証要求タイムアウト)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">アクセストークン検証エンドポイントを認証するときに、応答を待機する最大時間 (ミリ秒単位) を設定します。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10000</code></p></td>
</tr>
</tbody>
</table>

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

Anypoint Service Mesh によって管理される非 Mule アプリケーションの場合、次のパラメーターが表示されます。

<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"><p class="tableblock">Scopes (スコープ)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">サポートされるスコープのカンマ区切りリストを表示します。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>READ</code>​、​<code>WRITE</code>​、​<code>READ AND WRITE</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Skip Client Id Validation (クライアント ID 検証をスキップ)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">クライアントアプリケーションの API コントラクト検証をスキップします。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択した場合、​<a href="#how-this-policy-works">「ポリシーのしくみ」</a>​セクションの図のステップ 4 はスキップされます。</p></td>
</tr>
</tbody>
</table>

## [](#how-this-policy-works)ポリシーのしくみ

次の図は、OpenID Connect アクセストークン適用ポリシーワークフローを示しています。

![OpenID Connect OAuth 2.0 トークン適用ワークフロー](/mulesoft/current/ja-jp/gateway/1.8/_images/open-id-policy-workflow.png)

この図には次の動作が示されています。

1. ユーザーが最初にポリシーで保護された API に HTTP 要求を送信します。
2. ポリシーは要求からトークンを抽出し、それを検証エンドポイントに送信して、トークンの整合性を検証します。
3. トークン検証エンドポイントは、クライアントアプリケーションのクライアント ID を含むトークンメタデータを返します。
4. ポリシーは Anypoint Platform から以前に取得したコントラクトで更新されたローカルデータベースを使用して、クライアント ID が API にアクセスできるかどうかを検証します。
5. すべての検証が正常に完了すると、要求はバックエンドに到達できます。

### [](#leveraging-TVE-information)トークン検証エンドポイント情報の活用

トークン検証エンドポイントで正常にトークンが検証されると、特定の情報 (OpenID Connect の設定可能な項目など) がポリシーに返されます。

次の例は、認証サーバーからのトークン検証応答を示しています:

```text
{
    "uid":"john.doe",
    "mail":"john.doe@example.com"
    "token_type":"Bearer",
    "exp": 1516239022
    "alias" : ["Jhon", "Jhonny", "Mr Doe"],
    "address" : {
        "city": "london",
        "road": “abbey road"
    }
}
```

OAuth プロバイダーによって返された項目はポリシーによって処理され、フロー全体に伝播され、アクセスを要求しているアプリケーションが HTTP リクエスターを使用している場合は最終的にバックエンドに公開されます。

### [](#token-caching)ローカルモードでのトークンキャッシュ

システムがトークンを検証すると、そのトークンは (デフォルトで) 期限切れになるまでキャッシュされるため、ポリシーのパフォーマンスが向上します。失効したトークンなどの特定のケースでは、キャッシュを最小限に抑えたり無効にしたりできます。

検証エンドポイントは、トークンの有効期限などの複数のプロパティをポリシーに送信します。有効期限情報がない場合、トークンはキャッシュされません。

トークンのキャッシュにかかる時間を制御するには、トークン検証エンドポイントに対して再検証を試みる前に、宣言型設定ファイルで次のパラメーターを設定します。

 - policyRef:
     name: openidconnect-access-token-enforcement-flex
   config:
     ...
     maxFederationExpirationTime: <expiration time in seconds>

このプロパティを設定すると、指定された時間、またはトークンが期限切れになるまでのいずれか早い方でトークンがキャッシュされます。このプロパティが有効で、検証エンドポイントが有効期限情報を送信しない場合、トークンはキャッシュされません。

同時にキャッシュできるトークンの数を制御するには、宣言型設定ファイルで次のパラメーターを設定します。

  - policyRef:
     name: openidconnect-access-token-enforcement-flex
    config:
     ...
     maxCacheSize: <amount of tokens to be cached; default value is 1.000; specify 0 to disable caching>

### [](#token-validation-endpoint-authentication)トークン検証エンドポイント認証

指定されたトークンの検証が完了すると、ポリシーは要求を検証エンドポイントに送信します。次に、ポリシーは OAuth 2.0 認証フレームワーク仕様の「Token Introspection Client (トークンイントロスペクションクライアント)」セクションに従って、アクセス管理のクライアントプロバイダー設定からログイン情報を取得します。これらのログイン情報は、 [OAuth 2.0 認証フレームワーク仕様の「Client Authentication (クライアント認証)」セクション](https://tools.ietf.org/html/rfc6749#section-2.3)​で指定されているようにリクエストボディで送信されます。

トークン検証エンドポイントの認証方法は、現在サポートされていません。

## [](#expose-headers-ヘッダーを公開-オプションの設定)Expose Headers (ヘッダーを公開) オプションの設定

ポリシーで ​`Expose Headers`​ オプションを設定し、アプリケーション (標準のプロキシなど) が HTTP リクエスターを使用している場合、プロパティはヘッダーとしてバックエンドにリダイレクトされます。

項目ごとに、元の保護されたリソースへの要求が「X-AGW- + <key>=<value>」形式を使用する HTTP ヘッダーで強化されます。前のセクションの応答例では、次のヘッダーが追加されています。

```text
X-AGW-uid=john.doe
X-AGW-mail=john.doe@example.com
X-AGW-token_type=Bearer
```

伝播されたプロパティには、​`scope`​、​`exp`​ オブジェクトおよび配列は含まれません。

フロー内の以降の処理では、検証エンドポイントからの元の解析していない応答を使用できます。情報は認証オブジェクトに保存されます。

たとえば、​`mail`​ 項目がポリシーに返される場合、次の DataWeave 2.0 式を使用して項目の値にアクセスできます。

`#[authentication.properties.userProperties.mail]`

次の DataWeave 2.0 式を使用して、OAuth2 トークンのクライアント ID を取得できます。

`#[authentication.principal]`

## [](#faq)FAQ

**API に適用するポリシーのリストに OpenID Connect アクセストークン適用ポリシーが表示されない。**

ポリシーリストにポリシーが表示されない場合、アクセス管理で OpenID クライアントプロバイダーを設定していることを確認します。詳細は、​[「OpenID Connect クライアント管理を設定する」](https://docs.mulesoft.com/jp/access-management/configure-client-management-openid-task)​を参照してください。​[複数の IDP](https://docs.mulesoft.com/jp/api-manager/latest/configure-multiple-credential-providers)​ を使用している場合、API で OpenID Connect クライアントが正しく設定されていることを確認します。

**ポリシーで OAuth 2.0 トークンを生成できますか?**

いいえ。 ポリシーはトークンの検証のみを行います。

**OAuth トークンはどのようにキャッシュされますか?**

OAuth 2.0 トークンはメモリにのみキャッシュされ、ディスクに書き込まれることはありません。

**OpenID Connect アクセストークン適用ポリシーを設定した後にレート制限 SLA ポリシーを設定できますか?**

はい、できます。OpenID Connect アクセストークン適用ポリシーの後にレート制限 SLA ポリシーを適用し、次の DataWeave 2.0 式を使用して \[​`Client ID Expression`​ (クライアント ID 式)\] の値を指定します。

`#[authentication.principal]`

リクエスターの ID はすでに OpenID Connect アクセストークン適用ポリシーで検証されているため、\[​`Client Secret Expression`​ (クライアントシークレット式)\] 項目は空のままにできます。