> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> OpenID Connect および Okta Workforce 接続向けの Proof Key for Code Exchange (PKCE) とマッピングテンプレートを設定します。

# OIDC 接続の PKCE とクレームマッピングを設定する

[OpenID Connect](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/oidc) または O[kta Workforce](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/okta) を<Tooltip tip="Identity Provider (IdP): Service that stores and manages digital identities." cta="View Glossary" href="/docs/ja-jp/glossary?term=identity+provider">アイデンティティプロバイダー</Tooltip>として使用するエンタープライズ接続では、Proof Key for Code Exchange (PKCE) に加え、属性とトークンのマッピングもサポートできます。

<div id="configure-pkce-for-oidc-connections">
  ## OIDC 接続の PKCE を設定する
</div>

<Tooltip tip="OpenID: アプリケーションがログイン情報を収集・保存することなく、ユーザーの本人確認を行えるようにする認証のオープン標準。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OpenID">OpenID</Tooltip> Connect と Okta Workforce の接続は、Proof Key for Code Exchange (PKCE) をサポートするよう自動的に設定されています。

OIDC アイデンティティプロバイダー (IdP) が OIDC ディスカバリー メタデータを通じて PKCE をサポートしている場合、Auth0 はデフォルトで利用可能な中で最も強力なアルゴリズムを使用します。OIDC ディスカバリー メタデータの詳細については、[OpenID のドキュメント](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata)を参照してください。

<div id="view-pkce-configuration-for-a-connection">
  ### 接続のPKCE設定を表示する
</div>

特定の接続のPKCE設定は、<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要製品です。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip>で確認できます。

1. **Authentication > Enterprise** に移動し、OIDCプロバイダー (OpenID Connect または Okta Workforce) を選択します。
2. **Settings** タブを選択します。
3. **General** セクションで、**Connection Profile** フィールドを探します。

<Tabs>
  <Tab title="Auth0 Dashboard">
    接続のPKCE設定は、Auth0 Dashboard で管理できます。

    1. [**Dashboard > Authenticate >Enterprise**](https://manage.auth0.com/#/connections/enterprise) に移動し、OIDCプロバイダー (OpenID Connect または Okta Workforce) を選択します。
    2. **Settings** タブを選択し、**Connection Profile** フィールドを探します。
    3. `pkce` プロパティを、以下に記載されている[サポートされている値](#supported-pkce-configuration-values)のいずれかに設定します。
    4. **Save** を選択します。
  </Tab>

  <Tab title="Management API">
    #### discovery endpoint を使用する

    ```bash theme={null}
    curl --request POST \
    --url 'https://{yourDomain}/api/v2/connections' \
    --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
    --data '{ 
      "strategy": "oidc", 
       "name": "CONNECTION_NAME", 
       "options": { 
         "type": "back_channel", 
         "discovery_url": "https://IDP_DOMAIN/.well-known/openid-configuration", 
         "client_id" : "IDP_CLIENT_ID", 
         "client_secret" : "IDP_CLIENT_SECRET", 
         "scopes": "openid profile", 
         "connection_settings": { "pkce": "auto" }
                   } 
              };
    ```

    #### discovery endpoint を使用しない場合

    `discovery_url` がない場合は、`oidc_metadata` オブジェクトに必要なフィールドを手動で設定する必要があります。

    ```bash theme={null}
    curl --request POST \
      --url 'https://{yourDomain}/api/v2/connections' \
      --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
      --data '{
        "strategy": "oidc",
        "name": "CONNECTION_NAME",
        "options": {
          "type": "back_channel",
          "client_id": "IDP_CLIENT_ID",
          "client_secret": "IDP_CLIENT_SECRET",
          "connection_settings": { "pkce": "auto" },
          "issuer": "https://IDP_DOMAIN",
          "authorization_endpoint": "https://IDP_DOMAIN/authorize",
          "jwks_uri": "https://IDP_DOMAIN/.well-known/jwks.json",
          "scopes": "openid profile",
          "oidc_metadata": {
            "issuer": "https://IDP_DOMAIN",
            "authorization_endpoint": "https://IDP_DOMAIN/authorize",
            "jwks_uri": "https://IDP_DOMAIN/.well-known/jwks.json",
            "token_endpoint": "https://IDP_DOMAIN/token/refresh",
            "code_challenge_methods_supported": ["plain", "S256"]
          }
        }
      };
    ```
  </Tab>
</Tabs>

<div id="supported-pkce-configuration-values">
  ### サポートされている PKCE の設定値
</div>

Auth0 では、PKCE の設定に次の値をサポートしています。

| 値          | 説明                                                                                               |
| ---------- | ------------------------------------------------------------------------------------------------ |
| `auto`     | デフォルト値です。利用可能な中で最も強力なアルゴリズムを使用します。                                                               |
| `s256`     | SHA-256 アルゴリズムを使用します。Auth0 は現在、RS512 トークンをサポートしていません。                                            |
| `plain`    | [PKCE specification](https://www.rfc-editor.org/rfc/rfc7636#section-4.2) に記載されているプレーンテキストを使用します。 |
| `disabled` | PKCE のサポートを無効にします。                                                                               |

<Warning>
  `pkce` プロパティに `auto` 以外の値を設定すると、選択した値がアイデンティティプロバイダーでサポートされていない場合、接続が正しく機能しない可能性があります。

  認証の問題をトラブルシューティングする場合を除き、このプロパティを `disabled` に設定しないでください。
</Warning>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  **Microsoft Entra ID の制限事項**

  Microsoft Entra ID 用の OpenID Connect 接続を使用している場合、接続のメタデータでは使用されているハッシュアルゴリズムが公開されないため、`pkce` を `s256` に設定する必要があります。現在、[Microsoft Entra ID エンタープライズ接続](/docs/ja-jp/authenticate/identity-providers/enterprise-identity-providers/azure-active-directory/v2) は PKCE をサポートしていません。
</Callout>

<div id="map-claims-for-oidc-connections">
  ## OIDC 接続のクレームのマッピング
</div>

OpenID Connect 接続と Okta Workforce 接続では、アイデンティティプロバイダー (IdP) から受け取ったクレームを自動的にマッピングできます。このマッピングは、Auth0 が提供するライブラリテンプレートを使用するか、独自のテンプレートを直接入力して設定できます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  マッピングされたクレームは、Auth0 の ID トークンに自動的には追加されません。ID トークンにクレームを追加する方法については、[Create custom claims](/docs/ja-jp/secure/tokens/json-web-tokens/create-custom-claims#create-custom-claims)を参照してください。
</Callout>

<div id="mapping-template-properties">
  ### マッピングテンプレートのプロパティ
</div>

マッピングテンプレートでは、以下の `options.attribute_map` オブジェクトのプロパティをサポートしています。テンプレートは、有効なキーと値のペアを含む JSON 形式である必要があります。

| Property         | Required? | Description                                                |
| ---------------- | --------- | ---------------------------------------------------------- |
| `mapping_mode`   | 必須        | 受信したクレームをマッピングする方法。                                        |
| `userinfo_scope` | 任意        | 認可時に IdP に要求するスコープ。これにより、UserInfo エンドポイントで利用可能なクレームが決まります。 |
| `attributes`     | 必須        | 受信したクレームのマッピング詳細を含むオブジェクト。                                 |

<div id="mapping-mode">
  ### マッピングモード
</div>

`mapping_mode` プロパティは、IdP から受け取ったクレームを Auth0 ユーザープロファイルにマッピングする方法を定義します。`mapping_mode` では、次の値を使用できます。

| 値          | 説明                            |
| ---------- | ----------------------------- |
| `use_map`  | 指定されたテンプレートを使用してデータをマッピングします。 |
| `bind_all` | IdP から提供されたすべてのデータ要素をコピーします。  |

<div id="restricted-claims">
  #### 使用が制限されたクレーム
</div>

一部のクレームは Auth0 による使用のために予約されており、ユーザープロファイルの属性キーとして使用することはできません。

`mapping_mode` プロパティを `bind_all` に設定すると、IdP がこれらの使用が制限されたクレームの 1 つ以上に値をマッピングしようとする場合があります。これによって接続でのユーザー認証が妨げられることはありませんが、使用が制限されたクレームに関連付けられた値は、Auth0 ユーザープロファイルには**マッピングされません**。

`mapping_mode` を `use_map` に設定した場合は、受信した使用が制限されたクレームを有効なクレームにマッピングできます。

```json lines theme={null}
"attribute_map": {
        "mapping_mode": "use_map",
        "attributes": {
            "amr": "{context.tokenset.amr}", // `amr` は制限されたクレームのため、マッピングされません
            "federated_amr": "{context.tokenset.amr}" // `federated_amr` は制限されたクレームではないため、マッピングされます
        }
    }
```

制限されているクレームの一覧は、[Create Custom Claims](/docs/ja-jp/secure/tokens/json-web-tokens/create-custom-claims)を参照してください。

<div id="userinfo-scope">
  ### UserInfo スコープ
</div>

`userinfo_scope` プロパティは、Auth0 が IdP への認可リクエストに含めるスコープを定義します。これらのスコープは、IdP が `UserInfo` エンドポイントを通じて提供するクレームを決定します。属性マップで `context.userinfo properties` を参照している場合、Auth0 はこれらのスコープで付与された アクセストークン を使用して、IdP の `UserInfo` エンドポイントを呼び出します。

たとえば、標準の OIDC スコープと `groups` スコープをリクエストし、`UserInfo` エンドポイントからグループクレームを利用できるようにするには、次のように設定します。

```json lines theme={null}
"attribute_map": {
    "mapping_mode": "use_map",
    "userinfo_scope": "openid email profile groups",
    "attributes": {
        "name": "${context.tokenset.name}",
        "groups": "${context.userinfo.groups}"
    }
}
```

<div id="attributes">
  ### 属性
</div>

`attributes` プロパティは、Auth0 が IdP から受信するクレームを解釈できるようにするためのマッピング情報を含むオブジェクトです。マッピング情報は、キーと値のペアで指定する必要があります。

左側のキーは Auth0 ユーザープロファイルの属性に対応します。右側の値は IdP から受信するクレームを表し、リテラル値、動的コンテキストオブジェクト、またはその両方を組み合わせて指定できます。動的コンテキストオブジェクトは、`${variable}` という一般的な形式で記述するテンプレート式です。

```json lines theme={null}
"attribute_map": {
    . . .
    "attributes": {
        "name": "${context.tokenset.name}",
        "email": "${context.tokenset.email}",
        "username": "${context.tokenset.preferred_username}"
    }
}
```

<div id="literal-values">
  #### リテラル値
</div>

リテラル値とは、接続内のすべてのユーザーに対して、特定のプロファイル属性にマッピングされる固定値です。

たとえば、SalesForce OIDC 接続を設定していて、同じ SFDC Community ID をすべてのユーザープロファイルに割り当てる場合は、次のようにします。

```json lines theme={null}
"attribute_map": {
    . . .
    "attributes": {
        …
        "sf_community_id": "3423409219032-32"
    }
}
```

<div id="context-object">
  #### コンテキストオブジェクト
</div>

`context` オブジェクトを使用すると、動的な値をユーザープロファイル属性にマッピングできます。これにより、すべてのプロファイルで共通の固定リテラル値ではなく、各プロファイルに固有の値を保存できます。

`context` オブジェクトでは、次のプロパティを使用できます。

| プロパティ                | 説明                                                                                                                                          |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `context.connection` | 次のプロパティが含まれます。<br /><br /><li> `id`: 接続の一意の識別子 (例: `con_4423423423432423`) 。</li><br /><li> `strategy`: 接続のストラテジー (例: `oidc`) 。</li>        |
| `context.tokenset`   | 次のプロパティが含まれます。<br /><br /><li> `access_token`: IdP から送信された、検証済みのアクセストークン全体。</li><br /><li>`<claim name>`: IdP から送信された任意の ID トークンのクレーム。</li> |
| `context.userinfo`   | 次のプロパティが含まれます。<br /><br /><li> `<claim name>`: IdP の UserInfo エンドポイントから提供される、利用可能な任意のクレーム。</li>                                             |

<div id="examples">
  ### 例
</div>

<div id="simple-user-claim-mapping">
  #### シンプルなユーザークレームのマッピング
</div>

この例では、<Tooltip tip="ID トークン: リソースへのアクセスではなく、クライアント自体を対象とした認証情報です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=ID+token">ID トークン</Tooltip> のデータを使用して、一般的なユーザークレームを Auth0 ユーザープロファイルにマッピングする方法を示します。

```json lines theme={null}
"attribute_map": {
    . . .
    "attributes": {
        "name": "${context.tokenset.name}",
        "email": "${context.tokenset.email}",
        "username": "${context.tokenset.preferred_username}"
    }
}
```

<div id="group-claim-mapping">
  #### グループクレームのマッピング
</div>

この例では、受信したIdPからのグループを Auth0 ユーザープロファイルにマッピングする方法を示します:

```json lines theme={null}
"attribute_map": {
    . . .
    "attributes": {
        "federated_groups": "${context.userinfo.groups}",
        "federated_locale": "${context.userinfo.locale}",
        "federated_zoneinfo": "${context.userinfo.zoneinfo}"
    }
}
```

<div id="combining-literal-values-and-context-objects">
  #### リテラル値とコンテキストオブジェクトを組み合わせる
</div>

この例では、リテラル値と動的なテンプレート式を組み合わせて、複雑な値をAuth0のユーザープロファイルの属性にマッピングする方法を示します。

```json lines theme={null}
"attribute_map":{
    . . .
    "attributes": {
        "alt_id": "user_email|${context.tokenset.email}",
        . . .
    }
}
```
