

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ユーザープールでの OIDC ID プロバイダーの使用
<a name="cognito-user-pools-oidc-idp"></a>

ユーザーは、OpenID Connect (OIDC) ID プロバイダー (IdP) の既存アカウントを使用してアプリケーションにサインインできます。OIDC プロバイダーを使用すると、独立したシングルサインオンシステムのユーザーは、アプリケーションがユーザープールの共有形式で OIDC トークンを受信する間、既存の認証情報を提供できます。OIDC IdP を設定するには、ユーザープールを RP として処理するように IdP を設定するとともに、ユーザープールを IdP として処理するようにアプリケーションを設定します。Amazon Cognito は、複数の OIDC IdP とアプリケーションの間の中間ステップとして機能します。ユーザープールは、プロバイダーがユーザープールに直接渡す ID トークンとアクセストークンのクレームに、属性マッピングルールを適用します。次に、Amazon Cognito は、マッピングされたユーザー属性と、[Lambda トリガー](cognito-user-pools-working-with-lambda-triggers.md#lambda-triggers-for-federated-users)を使用して認証フローに加えた追加の調整に基づいて、新しいトークンを発行します。

OIDC IdP でサインインするユーザーは、ユーザープールアプリケーションにアクセスするために、新しい認証情報や情報を提供する必要はありません。アプリケーションは、ユーザープールを使用して、サインインのために IdP にサイレントにリダイレクトできます。この場合、ユーザープールは、アプリケーションのトークン形式を標準化するバックグラウンドのツールとして使用されます。IdP リダイレクトの詳細については、「[認可エンドポイント](authorization-endpoint.md)」を参照してください。

他のサードパーティー ID プロバイダーと同様に、アプリケーションを OIDC プロバイダーに登録し、ユーザープールに接続する IdP アプリケーションに関する情報を取得する必要があります。ユーザープール OIDC IdP には、クライアント ID、クライアントシークレット、リクエストするスコープ、プロバイダーサービスエンドポイントに関する情報が必要です。ユーザープールが検出エンドポイントからプロバイダーの OIDC エンドポイントを検出すできますが、ユーザーが手動で入力することもできます。また、プロバイダー ID トークンを調べ、IdP とユーザープール内の属性に関して属性マッピングを作成する必要があります。

![\[OIDC ユーザープール IdP 認証フロー\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/flow-cup-oidc-endpoints.png)


この認証フローの詳細については、「[OIDC ユーザープール IdP 認証フロー](cognito-user-pools-oidc-flow.md)」を参照してください。

**注記**  
サードパーティー (フェデレーション) 経由のサインインは、Amazon Cognito のユーザープールで使用できます。この機能は、Amazon Cognito アイデンティティプールを使用した OIDC フェデレーションとは無関係です。

OIDC IdP は AWS マネジメントコンソール、、、またはユーザープール API メソッド [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) を使用して AWS CLI、ユーザープールに追加できます。

**Topics**
+ [前提条件](#cognito-user-pools-oidc-idp-prerequisites)
+ [アプリケーションを OIDC IdP に登録する](#cognito-user-pools-oidc-idp-step-1)
+ [ユーザープールに OIDC IdP を追加する](#cognito-user-pools-oidc-idp-step-2)
+ [OIDC IdP の設定をテストする](#cognito-user-pools-oidc-idp-step-3)
+ [OIDC ユーザープール IdP 認証フロー](cognito-user-pools-oidc-flow.md)

## 前提条件
<a name="cognito-user-pools-oidc-idp-prerequisites"></a>

開始するには、以下が必要です。
+ アプリケーションクライアントとユーザープールドメインを使用するユーザープール。詳細については、「[ユーザープールの作成](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)」を参照してください。
+ 次の設定を持つ OIDC IdP。
  + `client_secret_post` クライアント認証をサポートします。Amazon Cognito は、IdP の OIDC ディスカバリエンドポイントでの `token_endpoint_auth_methods_supported` クレームをチェックしません。Amazon Cognito は、`client_secret_basic` クライアント認証をサポートしていません。クライアント認証の詳細については、OpenID Connect ドキュメントの「[クライアント認証](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication)」を参照してください。
  + `openid_configuration`、`userInfo`、および `jwks_uri` などの OIDC エンドポイントにのみ HTTPS を使用します。
  + OIDC エンドポイントには TCP ポート 80 および 443 のみを使用します。
  + HMAC-SHA、ECDSA または RSA アルゴリズムで ID トークンにのみ署名します。
  + キー ID `kid` クレームを `jwks_uri`  で発行し、そのトークンに `kid` クレームをフックみます。
  + 有効なルート CA トラストチェーンを持つ、有効期限が切れていないパブリックキーを表示します。

## アプリケーションを OIDC IdP に登録する
<a name="cognito-user-pools-oidc-idp-step-1"></a>

OIDC IdP をユーザープール設定に追加してアプリケーションクライアントに割り当てる前に、OIDC クライアントアプリケーションを IdP に設定します。ユーザープールは、依拠しているパーティのアプリケーションとして、IdP を使用して認証を管理します。

**OIDC IdP に登録する**

1. OIDC IdP のデベロッパーアカウントを作成します。  
**OIDC IdP へのリンク**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html)

1. OIDC IdP を使用して、`/oauth2/idpresponse` エンドポイントを持つユーザープールドメインを登録します。そうすることで、OIDC IdP が後ほど、ユーザーの認証時に Amazon Cognito からこれを受け入れることが確実になります。

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. ユーザーディレクトリとユーザープールで共有する[スコープ](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes)を選択します。OIDC IdP がユーザー情報を提供するには、スコープとして **openid** が必要です。`email` スコープは、`email` および `email_verified` の [クレーム](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims)へのアクセスを付与するために必要です。OIDC 仕様のその他のスコープは、すべてのユーザー属性のための `profile` と、`phone_number` および `phone_number_verified` のための `phone` です。

1. OIDC IdP は、クライアント ID とクライアントシークレットを提供します。これらの値をメモし、後でユーザープールに追加する OIDC IdP の設定に追加します。

**例: Salesforce を OIDC IdP としてユーザープールで使用する**

 OIDC 互換 IdP (Salesforce など) とユーザープールの間で信頼性を確立するときに OIDC IdP を使用します。

1. Salesforce 開発者ウェブサイトで[アカウントを作成](https://developer.salesforce.com/signup)します。

1. 前のステップで設定した開発者アカウントを使用して[サインイン](https://developer.salesforce.com)します。

1. Salesforce ページで、次のいずれかの操作を行います。
   +  Lightning Experience を使用している場合は、歯車アイコンを選択してから、**[Setup Home]** (ホームの設定) を選択します。
   +  Salesforce Classic を使用しており、ユーザーインターフェイスのヘッダーに [**Setup (設定)**] が表示されている場合は、選択します。
   +  Salesforce Classic を使用しており、ヘッダーに [**Setup (設定)**] が表示されていない場合は、上部のナビゲーションバーで名前を選択し、ドロップダウンリストより [**Setup (設定)**] を選択します。

1. 左のナビゲーションバーで、[**Company Settings (組織の設定)**] を選択します。

1. ナビゲーションバーで、**[Domain]** (ドメイン) を選択してドメインを入力し、**[Create]** (作成) を入力します。

1. 左のナビゲーションバーで、**[Platform Tools]** (プラットフォームツール) に移動し、**[Apps]** (アプリケーション) を選択します。

1. [**アプリケーションマネージャ**] を選択します。

1. 

   1. **[New connected app]** (新規接続アプリケーション) を選択します。

   1. 必須フィールドに入力します。

      **[Start URL]** (開始 URL) で、Salesforce IdP でサインインするユーザープールドメインの `/authorize` エンドポイントの URL を入力します。ユーザーが接続アプリケーションにアクセスすると、Salesforce はこの URL に誘導してサインインを完了します。次に、Salesforce はユーザーをアプリクライアントに関連付けたコールバック URL にリダイレクトします。

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforce
      ```

   1. **OAuth 設定**を有効にし、**コールバック URL** にユーザープールドメインの `/oauth2/idpresponse` エンドポイントの URL を入力します。これは、Amazon Cognito が OAuth トークンと交換する認可コードを Salesforce が発行する URL です。

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
      ```

1. [スコープ](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes)を選択します。スコープ **openid** を含める必要があります。**email** および **email\$1verified** の [クレーム](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims)へのアクセスを許可するには、**email** スコープを追加します。スコープはスペースで区切ります。

1. **[作成]** を選択します。

   Salesforce では、クライアント ID は [**コンシューマーキー**]、クライアントシークレットは [**コンシューマーシークレット**] と呼ばれます。クライアント ID とクライアントシークレットを書き留めます。これらは次のセクションで使用します。

## ユーザープールに OIDC IdP を追加する
<a name="cognito-user-pools-oidc-idp-step-2"></a>

IdP を設定したら、OIDC IdP で認証リクエストを処理するようにユーザープールを設定できます。

------
#### [ Amazon Cognito console ]

**コンソールで OIDC IdP を追加する**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。プロンプトが表示されたら、 AWS 認証情報を入力します。

1. ナビゲーションメニューから **[User Pools]** (ユーザープール) を選択します。

1. リストから既存のユーザープールを選択するか、[ユーザープールを作成](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)します。

1. **[ソーシャルプロバイダーと外部プロバイダー]** メニューを選択し、**[ID プロバイダーを追加]** を選択します。

1. [**OpenID Connect**] IdP を選択します。

1. **[プロバイダー名]** に一意の名前を入力します。

1. IdP の **[クライアント ID]** を入力します。これは、OIDC IdP で構築するアプリケーションクライアントの ID です。指定するクライアント ID は、`https://[your user pool domain]/oauth2/idpresponse` のコールバック URL で設定した OIDC プロバイダーである必要があります。

1. IdP の **[クライアントシークレット]** を入力します。これは、前のステップで入力したのと同じアプリケーションクライアントのクライアントシークレットである必要があります。

1. <a name="cognito-user-pools-oidc-step-2-substep-9"></a>このプロバイダーの **[Authorized scopes]** (承認済みスコープ) を入力します。スコープは、アプリケーションがプロバイダーにリクエストするユーザー属性のグループ (`name` および `email` など) を定義します。[OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-3.3) 仕様に従い、スコープはスペースで区切る必要があります。

   IdP は、ユーザーがサインインするときに、これらの属性をアプリケーションに提供することに同意するようユーザーに求める場合があります。

1. **[属性のリクエストメソッド]** を選択します。IdP は、`userInfo` エンドポイントへのリクエストを `GET` または `POST` の形式にするよう求める場合があります。例えば、Amazon Cognito の `userInfo` エンドポイントには `HTTP GET` リクエストが必要です。

1. **[セットアップ方法]** で、IdP の主要な OIDC フェデレーションエンドポイントへのパスを、ユーザープールで決定する方法を選択します。通常、IdP は、発行者のベース URL で `/well-known/openid-configuration` エンドポイントをホストします。これが該当するプロバイダーの場合、**[発行者 URL を通じた自動入力]** オプションは、そのベース URL の入力を求め、そこから `/well-known/openid-configuration` パスへのアクセスを試み、表示されたエンドポイントを読み取ります。エンドポイントパスが通常とは異なっていたり、代替プロキシを介して 1 つ以上のエンドポイントにリクエストを渡したりする場合があります。その場合は、**[手動入力]** を選択し、`authorization`、`token`、`userInfo`、`jwks_uri` エンドポイントのパスを指定します。
**注記**  
URL は、`https://` で始める必要があり、末尾にスラッシュ (`/`) を使用することはできません。この URL では、ポート番号 443 および 80 のみを使用できます。例えば、Salesforce では次の URL を使用します。  
`https://login.salesforce.com`   
自動入力を選択した場合、検出ドキュメントは `authorization_endpoint`、`token_endpoint`、`userinfo_endpoint`、および `jwks_uri` の値に HTTPS を使用する必要があります。そうしない場合は、ログインが失敗します。

1. **[OpenID Connect プロバイダーとユーザープール間の属性をマッピングする]** で属性マッピングルールを設定します。**ユーザープール属性**は Amazon Cognito ユーザープロファイルの*送信先*属性であり、**OpenID Connect 属性**は ID トークンのクレームまたは `userInfo` レスポンスで Amazon Cognito が検索する*ソース*属性です。Amazon Cognito は、OIDC クレーム **sub** を送信先ユーザープロファイルの `username` に自動的にマッピングします。

   詳細については、「[IdP 属性をプロファイルとトークンにマッピングする](cognito-user-pools-specifying-attribute-mapping.md)」を参照してください。

1. **[ID プロバイダーを追加]** を選択します。

1. **[アプリケーションクライアント]** メニューで、リストからアプリケーションクライアントを選択します。**[ログインページ]** タブに移動し、**[マネージドログインページの設定]** で **[編集]** を選択します。**[ID プロバイダー]** を見つけ、新しい OIDC IdP を追加します。

1. **[Save changes]** (変更の保存) をクリックします。

------
#### [ API/CLI ]

[CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html#API_CreateIdentityProvider_Example_2) の例 2 の OIDC 設定を参照してください。この構文を変更して、`CreateIdentityProvider` と `UpdateIdentityProvider` のリクエスト本文として使用するか、[create-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-identity-provider.html) の `--cli-input-json` 入力ファイルとして使用できます。

------

## OIDC IdP の設定をテストする
<a name="cognito-user-pools-oidc-idp-step-3"></a>

アプリケーションでは、ユーザーが OIDC プロバイダーでサインインできるように、ユーザーのクライアントでブラウザを起動する必要があります。前のセクションのセットアップ手順を完了したら、プロバイダーを使用したサインインをテストします。次の URL の例では、プレフィックスドメインを持つユーザープールのサインインページをロードします。

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

このリンクは、**[アプリケーションクライアント]** メニューに移動してアプリケーションクライアントを選択し、**[ログインページ]** タブに移動して **[ログインページを表示]** を選択したときに、Amazon Cognito に表示されるページです。ユーザープールドメインの詳細については、「[ユーザープールのドメインを設定する](cognito-user-pools-assign-domain.md)」を参照してください。クライアント ID とコールバック URL など、アプリケーションクライアントの詳細については、「[アプリケーションクライアントによるアプリケーション固有の設定](user-pool-settings-client-apps.md)」を参照してください。

次のリンク例では、`identity_provider` クエリパラメータを使用して、[認可エンドポイント](authorization-endpoint.md) から `MyOIDCIdP` プロバイダーへのサイレントリダイレクトを設定します。この URL は、マネージドログインによるインタラクティブなユーザープールのサインインをバイパスし、IdP サインインページに直接移動します。

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?identity_provider=MyOIDCIdP&response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```