

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

# ユーザープールの開始方法
<a name="getting-started-user-pools"></a>

アプリケーションで認証とアクセスコントロールを必要とする場合は、シングルサインオン (SSO) 用の OpenID Connect (OIDC) フレームワーク内で作業できます。Amazon Cognito には、 AWS SDK を使用してアプリケーションのバックエンドで認証のロジックを処理し、クライアントでブラウザを呼び出してマネージド認可サーバーにアクセスするためのツールがあります。

Amazon Cognito コンソールでは、用意された手順に従って、任意のアプリケーションフレームワークのビューからユーザープールを作成できます。さらに続けて、外部の[ソーシャル](tutorial-create-user-pool-social-idp.md) ID プロバイダー (IdP) や [SAML 2.0](tutorial-create-user-pool-saml-idp.md) ID プロバイダーとのフェデレーティッドサインインなどの機能を追加できます。Amazon Cognito コンソールのアプリケーションモデルは、プロジェクトへの OIDC ライブラリの追加とブラウザの起動に依存しています。

機能セットを拡張し、Amazon Cognito のコンポーネントをさらに組み込むには、ユーザープールを使用して実行できるすべての事項に関する [Amazon Cognito ユーザープール](cognito-user-pools.md)の章をお読みください。

この章と Amazon Cognito コンソールの例では、アプリケーションリソースと Amazon Cognito ユーザープールとの基本的な統合を示しています。後で、利用可能なオプションで使用するものを増やすようにユーザープールを調整できます。次に、新しい機能の導入や IdP とのやり取りを行うように、アプリケーションを更新できます。

[マネージドログインページ](cognito-terms.md#terms-managedlogin)を使用しない場合は、 AWS SDK または を使用して、カスタムビルドの認証インターフェイスを持つアプリケーションを作成できます AWS Amplify。この方法で構築したアプリケーションは、[ユーザープール API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) とのやり取り用であり、[ローカルユーザー](cognito-terms.md#terms-localuser)の認証にのみ適しています。この認証モデルの詳細については、「[その他のアプリケーションオプション](getting-started-user-pools-application-other-options.md)」を参照してください。

**Topics**
+ [Amazon Cognito コンソールで新しいアプリケーションを作成する](getting-started-user-pools-application.md)
+ [その他のアプリケーションオプション](getting-started-user-pools-application-other-options.md)
+ [ユーザープールに機能とセキュリティオプションを追加する](user-pool-next-steps.md)

# Amazon Cognito コンソールで新しいアプリケーションを作成する
<a name="getting-started-user-pools-application"></a>

ユーザープールは、ソフトウェアアプリケーションに認証オプションを追加します。最も簡単に作成を開始するには、Amazon Cognito コンソールにアクセスし、表示される手順に従ってください。作成手順に従って、ユーザープールリソースの設定だけでなく、アプリケーションの初期設定も行うことができます。

開始する準備ができたら、[Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/v2/idp/user-pools)にアクセスし、ボタンを選択して新しいユーザープールを作成します。セットアッププロセスでは、設定とプログラミング言語のオプションについて説明します。

**認証の概念に関するその他のリソース**
+ [Amazon Cognito ユーザープールによる認証](authentication.md)
+ [API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)
+ [Amazon Cognito による認証の仕組み](cognito-how-to-authenticate.md)
+ [Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する](cognito-integrate-apps.md)

**アプリケーション用の Amazon Cognito リソースを作成するには**

1. [Amazon Cognitoコンソール](https://console.aws.amazon.com/cognito/) に移動します。Amazon Cognito リソースを作成および管理できるように IAM プリンシパルにアクセス許可を割り当てるには、「[AWS Amazon Cognito の マネージドポリシー](security-iam-awsmanpol.md)」を参照してください。ユーザープールの作成には、`AmazonCognitoPowerUser` ポリシーで十分です。

1. **[ユーザープール]** メニューから **[ユーザープールを作成]** を選択するか、**[5 分未満で無料で開始できます]** を選択します。

1. **[アプリケーションを定義]** で、認証および認可サービスを作成する対象のアプリケーションシナリオに最適な**アプリケーションタイプ**を選択します。

1. **[アプリケーションに名前を付ける]** で、わかりやすい名前を入力するか、デフォルト名を使用します。

1. **[オプションを設定]** では、ユーザープールの作成後に変更できない設定をサポートする基本的な選択を行う必要があります。

   1. **[サインイン識別子のオプション]** で、サインインさせるユーザーを識別する方法を指定します。ユーザー生成のユーザー名、E メールアドレス、または電話番号を選択できます。複数のオプションの組み合わせを許可することもできます。Amazon Cognito は、ここで設定したオプションを、[マネージドログイン](cognito-user-pools-managed-login.md)のサインインフォームのユーザー名フィールドで受け入れます。

   1. **[サインアップのための必須属性]** で、ユーザーが新しいアカウントに登録したときに収集するユーザー情報を指定します。マネージドログインページでは、Amazon Cognito はすべての必須属性に対するプロンプトを表示します。

      **[サインイン識別子のオプション]** は、必須属性に影響します。**[ユーザー名]** には、E メールまたは SMS メッセージでパスワードリセットコードを受信できるように、ユーザーごとに E メールまたは電話が属性として必要です。**[メールアドレス]** には E メール属性が必要で、**[電話番号]** には電話番号属性が必要です。

1. **[リターン URL を追加**」に、ユーザーが認証を完了した後にアプリケーションにリダイレクトするためのパスを入力します。このパスは、OpenID Connect (OIDC) ライブラリを使用してユーザー認証結果を処理するアプリケーション内のルートである必要があります。テストアプリケーション用のリターン URL の例は `https://localhost:3000/callback` です。Amazon Cognito コンソールの NodeJS アプリケーションの例では、このルートは [openid-client](https://www.npmjs.com/package/openid-client) を使用してアクセストークンを収集し、ユーザー情報と引き換えます。リソースの作成後に、開発プラットフォームの例を参照できるようになります。

1. **[アプリケーションを作成]** を選択します。Amazon Cognito は、アプリケーションタイプのデフォルト設定を使用して、ユーザープールとアプリケーションクライアントを作成します。初期リソースの作成後に、[[外部 ID プロバイダー]](cognito-user-pools-identity-federation.md) や [[多要素認証 (MFA)]](user-pool-settings-mfa.md#user-pool-configuring-mfa) など、その他のオプションを設定できます。

1. **[アプリケーションを設定]** ページでは、アプリケーションのコード例をすぐに取得できます。新しいユーザープールを確認するには、下にスクロールして **[概要に移動]** を選択します。

1. 同じユーザープールに、さらにアプリケーションを追加するには、**[アプリケーションクライアント]** メニューに移動し、新しいアプリケーションクライアントを追加します。これに伴って、アプリケーションの作成を主としたプロセスが繰り返されますが、ここでは新しいアプリケーションクライアントを既存のユーザープールに追加するだけです。

このプロセスでユーザープールと 1 つ以上のアプリケーションクライアントを作成したら、マネージドログインを使用して認証オペレーションのテストを開始できます。これらのクイックスタートオプションは、一般のセルフサインアップに開放されています。コンソールプロセスを使用してテスト環境を作成したら、最終的な設計を本番環境に移行することをお勧めします。Amazon Cognito の機能に慣れるまでの時間を取ってください。次に、本稼働ワークロードに移行するには、カスタム設定を作成し、 AWS CloudFormation や などの自動化ツールを使用してデプロイします AWS Cloud Development Kit (AWS CDK)。

Amazon Cognito は、このプロセスで元に戻すことができないデフォルト設定をいくつか作成します。変更できないユーザープール設定とコンソールで選択できるオプションの詳細については、「[ユーザープールとアプリケーションクライアントの設定更新](cognito-user-pool-updating.md)」を参照してください。


| 設定 | 効果 | 変更方法 | 詳細情報 | 
| --- | --- | --- | --- | 
| クライアントシークレット | 認証リクエストにはクライアントシークレットハッシュが必要です。 | [従来のウェブアプリケーション] または [Machine to Machine アプリケーション] プロファイルを使用して新しいアプリケーションクライアントを作成します。 | [アプリケーションクライアントによるアプリケーション固有の設定](user-pool-settings-client-apps.md) | 
| 優先ユーザー名 | ユーザープールは preferred\$1username 属性をエイリアスとして受け入れません。 |  AWS SDK を使用してプログラムでユーザープールを作成します。 | [ログイン属性のカスタマイズ](user-pool-settings-attributes.md#user-pool-settings-aliases) | 
| 大文字と小文字の区別 | ユーザープールのユーザー名では大文字と小文字は区別されません。例えば、JohnD と johnd は同じユーザーと見なされます。 |  AWS SDK を使用してプログラムでユーザープールを作成します。 | [ユーザープールの大文字と小文字の区別](user-pool-case-sensitivity.md) | 

# その他のアプリケーションオプション
<a name="getting-started-user-pools-application-other-options"></a>

既存のアプリケーション UI を Amazon Cognito の認証と統合できるかもしれません。独自の認証ページが既にあっても、ディレクトリ設定の機能は Amazon Cognito のユーザープールほどではないかもしれません。このタイプのアプリケーションには、さまざまなプログラミング言語の AWS SDKs で Amazon Cognito 統合を使用して、認証コンポーネントを追加または置き換えることができます。以下にいくつか例を示します。

Amazon Cognito コンソールで、この目的のためのユーザープールを作成すると、インタラクティブなサインインページや OpenID Connect (OIDC) サービスをホストする[ユーザープールドメイン](cognito-user-pools-assign-domain.md)が不要になる場合があります。コンソールでユーザープールを作成するプロセスにより、ドメインは自動的に生成されます。このドメインは、ユーザープールの **[ドメイン]** タブで削除できます。その他のオプションには、 AWS SDKs の API リクエストと CLI の自動セットアップオプションを使用して、アプリケーション用の Amazon Cognito AWS Amplify リソースをプログラムで作成することが含まれます。詳細については、「[Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する](cognito-integrate-apps.md)」を参照してください。

**Topics**
+ [サンプル React 単一ページアプリケーションを設定する](#getting-started-test-application-react)
+ [Flutter でサンプル Android アプリケーションを設定する](#getting-started-test-application-flutter)

## サンプル React 単一ページアプリケーションを設定する
<a name="getting-started-test-application-react"></a>

このチュートリアルでは、ユーザーのサインアップ、確認、サインインをテストできる React 単一ページアプリケーションを作成します。React は、ウェブアプリケーションおよびモバイルアプリケーション用の JavaScript ベースのライブラリで、ユーザーインターフェイス (UI) に焦点を当てています。このサンプルアプリケーションは、Amazon Cognito ユーザープールのいくつかの基本的機能を示しています。React を使用したウェブアプリケーション開発の経験がある場合は、[GitHub からサンプルアプリケーションをダウンロード](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/cognito-identity-provider/scenarios/cognito-developer-guide-react-example)します。

次のスクリーンショットは、作成するアプリケーションの初期認証ページです。

![\[React ベースのサンプルウェブアプリケーションのサインアップページのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/cognito-getting-started-react-app-running.png)


このアプリケーションをセットアップする場合、ユーザープールは以下の要件を満たしている必要があります。
+ ユーザーは E メールアドレスでサインインできます。**[Cognito ユーザープールのサインインオプション]**: **[E メール]**。
+ ユーザー名の大文字と小文字は区別されません。**[ユーザー名の要件]**: **[ユーザー名の大文字と小文字を区別する]** が選択されていません。
+ 多要素認証 (MFA) は必要ありません。**[MFA の強制]**: **[オプションの MFA]**。
+ ユーザープールは、E メールメッセージを使用して、ユーザープロファイルの確認用の属性を検証します。**[検証する属性]**: **[E メールのメッセージを送信、E メールアドレスを検証]**。
+ E メールは唯一の必須の属性です。**[必須の属性]**: **[E メール]**。
+ ユーザーはユーザープールにサインアップできます。**[自己登録]**: **[自己登録を有効化]** が選択されています。
+ 最初のアプリケーションクライアントは、ユーザー名とパスワードによるサインインを許可するパブリッククライアントです。**[アプリケーションタイプ]**: **[パブリッククライアント]**、**[認証フロー]**: `ALLOW_USER_PASSWORD_AUTH`。

### アプリケーションの作成
<a name="getting-started-test-application-react-create-app"></a>

このアプリケーションを構築するには、デベロッパー環境を設定する必要があります。デベロッパー環境の要件は次のとおりです。

1. Node.js がインストールされ、更新されています。

1. Node Package Manager (npm) がインストールされ、バージョン 10.2.3 以上に更新されています。

1. 環境には、ウェブブラウザの TCP ポート 5173 からアクセスできます。

**サンプル React ウェブアプリケーションを作成するには**

1. デベロッパー環境にサインインし、アプリケーションの親ディレクトリに移動します。

   ```
   cd ~/path/to/project/folder/
   ```

1. 新しい React サービスを作成します。

   ```
   npm create vite@latest frontend-client -- --template react-ts
   ```

1. GitHub の AWS コード例リポジトリから`cognito-developer-guide-react-example`[プロジェクトフォルダ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/cognito-identity-provider/scenarios/cognito-developer-guide-react-example)をクローンします。

   ```
   cd ~/some/other/path
   ```

   ```
   git clone https://github.com/awsdocs/aws-doc-sdk-examples.git
   ```

   ```
   cp -r ./aws-doc-sdk-examples/javascriptv3/example_code/cognito-identity-provider/scenarios/cognito-developer-guide-react-example/frontend-client ~/path/to/project/folder/
   ```

1. プロジェクトで、`src` ディレクトリに移動します。

   ```
   cd ~/path/to/project/folder/frontend-client/src
   ```

1. `config.json` を編集して、以下の値を置き換えます:

   1. を AWS リージョン コード`YOUR_AWS_REGION`に置き換えます。例: `us-east-1`。

   1. `YOUR_COGNITO_USER_POOL_ID`を、テスト用に指定したユーザープールの ID に置き換えます。例: `us-east-1_EXAMPLE`。ユーザープールは、前のステップで AWS リージョン 入力した にある必要があります。

   1. `YOUR_COGNITO_APP_CLIENT_ID` を、テスト用に指定したアプリケーションクライアントの ID に置き換えます。例: `1example23456789`。アプリケーションクライアントは、前のステップのユーザープールに存在する必要があります。

1. `localhost` 以外の IP からサンプルアプリケーションにアクセスする場合は、`package.json` を編集して行 `"dev": "vite",` を `"dev": "vite --host 0.0.0.0",` に変更します。

1. アプリケーションをインストールします。

   ```
   npm install
   ```

1. アプリケーションを起動します。

   ```
   npm run dev
   ```

1. ウェブブラウザで `http://localhost:5173` または `http://[IP address]:5173` のアプリケーションにアクセスします。

1. 有効な E メールアドレスで新しいユーザーをサインアップします。

1. E メールメッセージから確認コードを取得します。確認コードをアプリケーションに入力します。

1. ユーザー名とパスワードを使用してサインインします。

### Amazon Lightsail を使用した React デベロッパー環境の作成
<a name="getting-started-test-application-react-lightsail"></a>

このアプリケーションの使用を開始する簡単な方法は、Amazon Lightsail を使用して仮想クラウドサーバーを作成することです。

Lightsail を使用すると、このサンプルアプリケーションの前提条件が事前設定された小型サーバーインスタンスをすばやく作成できます。ブラウザベースのクライアントを使用してインスタンスに SSH を送信し、パブリックまたはプライベートの IP アドレスでウェブサーバーに接続できます。

**このサンプルアプリケーション用の Lightsail インスタンスを作成するには**

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

1. **[インスタンスの作成]** を選択します。

1. **[プラットフォームを選択]** で、**[Linux/Unix]** を選択します。

1. **[ブループリントの選択]**で、**[Node.js]** を選択します。

1. **[インスタンスを確認]** で、開発環境にわかりやすい名前を付けます。

1. **[インスタンスの作成]** を選択します。

1. Lightsail がインスタンスを作成したら、インスタンスを選択し、**[接続]** タブから **[SSH を使用して接続]** を選択します。

1. SSH セッションがブラウザウィンドウで開きます。`node -v` と `npm -v` を実行して、インスタンスが Node.js と npm バージョン 10.2.3 以上でプロビジョニングされていることを確認します。

1. [[React アプリケーションを設定]](#getting-started-test-application-react) に進みます。

## Flutter でサンプル Android アプリケーションを設定する
<a name="getting-started-test-application-flutter"></a>

このチュートリアルで、Android Studio でモバイルアプリケーションを作成し、デバイスをエミュレートしてユーザーのサインアップ、確認、サインインをテストできるようになります。このサンプルアプリケーションでは、Flutter で Android 用の基本的な Amazon Cognito ユーザープールモバイルクライアントを作成します。Flutter を使用したモバイルアプリケーション開発の経験がある場合は、[GitHub からサンプルアプリケーションをダウンロード](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/usecases/cognito_flutter_mobile_app)します。

次のスクリーンショットは、仮想 Android デバイスで実行されているアプリケーションを示しています。

![\[仮想化 Android サンプルアプリケーションのサインアップページのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/cognito-getting-started-android-app-running.png)


このアプリケーションをセットアップするには、ユーザープールが以下の要件を満たしている必要があります。
+ ユーザーは E メールアドレスでサインインできます。**[Cognito ユーザープールのサインインオプション]**: **[E メール]**。
+ ユーザー名の大文字と小文字は区別されません。**[ユーザー名の要件]**: **[ユーザー名の大文字と小文字を区別する]** が選択されていません。
+ 多要素認証 (MFA) は必要ありません。**[MFA の強制]**: **[オプションの MFA]**。
+ ユーザープールは、E メールメッセージを使用して、ユーザープロファイルの確認用の属性を検証します。**[検証する属性]**: **[E メールのメッセージを送信、E メールアドレスを検証]**。
+ E メールは唯一の必須の属性です。**[必須の属性]**: **[E メール]**。
+ ユーザーはユーザープールにサインアップできます。**[自己登録]**: **[自己登録を有効化]** が選択されています。
+ 最初のアプリケーションクライアントは、ユーザー名とパスワードによるサインインを許可するパブリッククライアントです。**[アプリケーションタイプ]**: **[パブリッククライアント]**、**[認証フロー]**: `ALLOW_USER_PASSWORD_AUTH`。

### アプリケーションの作成
<a name="getting-started-test-application-flutter-create-app"></a>

**サンプル Android アプリケーションを作成するには**

1. [[Android Studio]](https://developer.android.com/studio) と [[コマンドラインツール]](https://developer.android.com/tools) をインストールします。

1. Android Studio で、[[Flutter プラグイン]](https://docs.flutter.dev/get-started/editor?tab=androidstudio) をインストールします。

1. [このサンプルアプリケーション](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/usecases/cognito_flutter_mobile_app)の `cognito_flutter_mobile_app` ディレクトリの内容から新しい Android Studio プロジェクトを作成します。

   1. `assets/config.json` を編集して、`<<YOUR USER POOL ID>>` と `<< YOUR CLIENT ID>>` をユーザープールとアプリケーションクライアントの ID に置き換えます。

1. [Flutter](https://docs.flutter.dev/get-started/install) をインストールします。

   1. PATH 変数に Flutter を追加します。

   1. 次のコマンドを使用してライセンスを受け入れます。

      `flutter doctor --android-licenses`

   1. Flutter 環境を確認し、不足しているコンポーネントをインストールします。

      `flutter doctor`

      1. コンポーネントが不足している場合は、`flutter doctor -v` を実行して問題を解決する方法を学びます。

   1. 新しい Flutter プロジェクトのディレクトリに変更し、依存関係をインストールします。

      1. `flutter pub add amazon_cognito_identity_dart_2` を実行します。

   1. `flutter pub add flutter_secure_storage` を実行します。

1. Android 仮想デバイスを作成します。

   1. Android Studio GUI で、[[デバイスマネージャー]](https://developer.android.com/studio/run/managing-avds) を使用して新しいデバイスを作成します。

   1. CLI で、`flutter emulators --create --name android-device` を実行します。

1. 仮想 Android デバイスを起動します。

   1. Android Studio GUI で、仮想デバイスの横にある [![\[Play button icon with a blue triangle pointing to the right.\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/cognito-getting-started-android-virtual-device-start.png) の開始] アイコンを選択します。

   1. CLI で、`flutter emulators --launch android-device` を実行します。

1. 仮想デバイスでアプリケーションを起動します。

   1. Android Studio GUI で、[![\[Green play button icon representing a start or play action.\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/cognito-getting-started-android-app-start.png) のデプロイ] アイコンを選択します。

   1. CLI で、`flutter run` を実行します。

1. Android Studio で、実行中の仮想デバイスに移動します。

1. 有効な E メールアドレスで新しいユーザーをサインアップします。

1. E メールメッセージから確認コードを取得します。確認コードをアプリケーションに入力します。

1. ユーザー名とパスワードを使用してサインインします。

# ユーザープールに機能とセキュリティオプションを追加する
<a name="user-pool-next-steps"></a>

チュートリアルに従ってサンプルアプリケーションを完成させたら、ユーザープールの実装の範囲を広げることができます。または、テストアプリケーションを作成していない場合は、設定に従って新しいユーザープールを作成します。他のアプリケーションのユーザープール機能をカスタマイズしたり、[外部 ID プロバイダーを追加](tutorial-create-user-pool-social-idp.md)したりできます。Amazon Cognito ユーザープールを本稼働アプリケーションに配置する移動を計画するときは、[追加のサンプルとチュートリアル](cognito-guided-setup.md)を評価できます。

次の優先順位として、ユーザープールでアプリケーションセキュリティオプションを調べて適用する場合は、「[Amazon Cognito ユーザープールに対するセキュリティのベストプラクティス](user-pool-security-best-practices.md)」を参照してください。

Amazon Cognito には機能プランがあり、上位階層にオプトインして機能オプションやセキュリティオプションを追加できます。*ライト*プランから開始して、*エッセンシャル*プランで高度な認証や認可のオプションを追加し、*プラス*プランで自動推論セキュリティガードレールを追加できます。詳細については、「[ユーザープールの機能プラン](cognito-sign-in-feature-plans.md)」を参照してください。

以下は、Amazon Cognito ユーザープールのその他の機能です。
+ [マネージドログインページにブランディングを適用する](managed-login-branding.md)
+ [ユーザープールに MFA を追加します](user-pool-settings-mfa.md)
+ [脅威保護を備えた高度なセキュリティ](cognito-user-pool-settings-threat-protection.md)
+ [Lambda トリガーを使用したユーザープールワークフローのカスタマイズ](cognito-user-pools-working-with-lambda-triggers.md)
+ [ユーザープール分析に Amazon Pinpoint を使用する](cognito-user-pools-pinpoint-integration.md)

Amazon Cognito の認証と認可のモデルの概要については、「[Amazon Cognito による認証の仕組み](cognito-how-to-authenticate.md)」を参照してください。

ユーザープール認証が成功 AWS のサービス した後に他の にアクセスするには、「」を参照してください[サインイン後の ID プール AWS のサービス を使用した へのアクセス](amazon-cognito-integrating-user-pools-with-identity-pools.md)。

 AWS マネジメントコンソール とユーザープール SDKs を使用するだけでなく、 を使用してユーザープールを管理することもできます[AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html)。

**Topics**
+ [ユーザープールにソーシャルサインインを追加する](tutorial-create-user-pool-social-idp.md)
+ [SAML 2.0 ID プロバイダー (IdP) を追加する](tutorial-create-user-pool-saml-idp.md)

# ユーザープールにソーシャルサインインを追加する
<a name="tutorial-create-user-pool-social-idp"></a>

既存のパブリック ID プロバイダーまたはソーシャル ID プロバイダーを通じてアプリケーションにサインインする機能をユーザーに提供することで、認証エクスペリエンスを改善できます。Amazon Cognito ユーザープールは、Facebook、Google、Amazon、Apple などの一般的なソーシャル ID プロバイダー (IdP) と統合され、ユーザーが既に使い慣れている便利なサインインオプションを提供します。

ソーシャルサインインを設定すると、アプリケーション専用のアカウントを作成する代わりのサインインをユーザーが使用できるようになります。これにより、変換率が向上し、サインアッププロセスが一層シームレスになります。ユーザーの視点から見ると、別のユーザー名とパスワードを記憶しておく手間なく、既存のソーシャル認証情報を適用してすばやく認証できます。

ユーザープールでソーシャル IdP を設定するには、いくつかの重要なステップが必要です。クライアント ID とシークレットを取得するには、アプリケーションをソーシャルプロバイダーに登録する必要があります。次に、ソーシャル IdP 設定をユーザープールに追加し、リクエストするスコープと、IdP 属性からマッピングするユーザープール属性を指定できます。実行時に、Amazon Cognito はプロバイダーとのトークン交換を処理し、ユーザー属性をマッピングし、共有ユーザープール形式でアプリケーションにトークンを発行します。

## ソーシャル IdP に登録する
<a name="cognito-user-pools-social-step-1"></a>

Amazon Cognito でソーシャル IdP を作成する前に、アプリケーションをソーシャル IdP に登録して、クライアント ID とクライアントシークレットを取得する必要があります。

### アプリケーションを Facebook に登録する
<a name="register-an-app-with-facebook"></a>

1. [Facebook の開発者アカウント](https://developers.facebook.com/docs/facebook-login)を作成します。

1. Facebook 認証情報を使用して[サインイン](https://developers.facebook.com/)します。

1. **[My Apps]** (マイアプリ) メニューから、**[新しいアプリを作成]** (新しいアプリを作成) を選択します。

   既存の Facebook アプリケーションがない場合は、別のオプションが表示されます。[**Create App (アプリの作成)**] を選択します。

1. **[アプリの作成]** ページで、アプリのユースケースを選択し、**[次へ]** を選択します。

1. Facebook アプリケーションに名前を入力して、**[アプリの作成]** を選択します。

1. 左のナビゲーションバーで、**[設定]**、**[基本]** の順に選択します。

1. **[App ID]** (アプリ ID)] と **[App Secret** (アプリシークレット) を書き留めます。これらは次のセクションで使用します。

1. ページの下部で、**[\$1 プラットフォームを追加]** を選択します。

1. **[プラットフォームの選択]** 画面で、プラットフォームを選択し、**[次へ]** を選択します。

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

1. **[App Domains]** (アプリケーションドメイン) で、ユーザープールのドメインを入力します。

   ```
   https://your_user_pool_domain
   ```

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

1. ナビゲーションバーで **[製品]** を選択し、**[Facebook でログイン]** の　**[設定]** を選択します。

1. **[Facebook でログイン]** の **[設定]** メニューから **[設定]** を選択します。

   **[Valid OAuth Redirect URIs]** (有効な OAuth リダイレクト URI) にリダイレクト URL を入力します。リダイレクト URL は、`/oauth2/idpresponse` エンドポイントを持つユーザープールのドメインで構成されます。

   ```
   https://your_user_pool_domain/oauth2/idpresponse
   ```

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

### アプリケーションを Amazon に登録する
<a name="register-an-app-with-amazon"></a>

1. [Amazon の開発者アカウント](https://developer.amazon.com/login-with-amazon)を作成します。

1. Amazon 認証情報を使用して[サインイン](https://developer.amazon.com/lwa/sp/overview.html)します。

1. Amazon クライアント ID およびクライアントシークレットを受け取るには、Amazon セキュリティプロファイルを作成する必要があります。

   ページの上部にあるナビゲーションバーで **[アプリケーションとサービス]** を選択し、**[Login with Amazon]** を選択します。

1. [**Create a New Security Profile (新しいセキュリティプロファイルの作成)**] を選択します。

1. **[Security Profile Name]** (セキュリティプロファイル名)、**[Security Profile Description]** (セキュリティプロファイルの説明)、**[Consent Privacy Notice URL]** (プライバシー規約 URL の同意) に入力します。

1. **[保存]** を選択します。

1. [**クライアント ID**] および [**クライアントシークレット**] を選択して、クライアント ID およびシークレットを表示します。これらは次のセクションで使用します。

1. 歯車アイコンにマウスカーソルを合わせ、**[Web Settings]** (ウェブ設定)、**[Edit]** (編集) の順に選択します。

1. **[Allowed Origins]** (許可されたオリジン) にユーザープールのドメインを入力します。

   ```
   https://<your-user-pool-domain>
   ```

1. `/oauth2/idpresponse` エンドポイントを使用するユーザープールドメインを [**Allowed Return URLs**] (許可されたリターン URL) に入力します。

   ```
   https://<your-user-pool-domain>/oauth2/idpresponse
   ```

1. **[保存]** を選択します。

### アプリケーションを Google に登録する
<a name="register-an-app-with-google"></a>

Google Cloud プラットフォームの OAuth 2.0 の詳細については、「Google Workspace デベロッパーガイド」ドキュメントの「[認証と認可の詳細](https://developers.google.com/workspace/guides/auth-overview)」を参照してください。

1. [Google の開発者アカウント](https://developers.google.com/identity)を作成します。

1. [Google Cloud Platform コンソール](https://console.cloud.google.com/home/dashboard)にサインインします。

1. 上部のナビゲーションバーから、**[Select a project]** (プロジェクトの選択) を選択します。Google プラットフォームにプロジェクトが既にある場合は、このメニューには代わりにデフォルトのプロジェクトが表示されます。

1. **[NEW PROJECT]** (新しいプロジェクト) を選択します。

1. 製品の名前を入力し、**[CREATE]** (作成) を選択します。

1. 左のナビゲーションバーで、**[API とサービス]** を選択し、**[OAuth 同意画面]** を選択します。

1. アプリケーション情報である **[アプリケーションドメイン]**、**[認可済みドメイン]**、**[デベロッパーの連絡先情報]** を入力します。**[認可済みドメイン]** には、`amazoncognito.com` とカスタムドメインのルートを含める必要があります。例: `example.com`。**[SAVE AND CONTINUE]** (保存して続行) を選択します。

1. 1. **[スコープ]** で、**[スコープの追加または削除]** を選択し、少なくとも、次の OAuth スコープを選択します。

   1. `.../auth/userinfo.email`

   1. `.../auth/userinfo.profile`

   1. openid

1. **[Test users]** (テストユーザー) で、**[Add users]** (ユーザーの追加) を選択します。E メールアドレスおよびその他の認可済みテストユーザーを入力して、**[保存して続行]** を選択します。

1. 左のナビゲーションバーを再度展開し、**[API とサービス]** を選択して、**[認証情報]** を選択します。

1. **[認証情報の作成]**、**[OAuth クライアント ID]** の順に選択します。

1. **[Application type]** (アプリケーションタイプ) を選択し、クライアントに **[Name]** (名前) を入力します。

1. **[Authorized JavaScript origins]** (承認済みの JavaScript 生成元) で、**[ADD URI]** (URI の追加) を選択します。ユーザープールのドメインを入力します。

   ```
   https://<your-user-pool-domain>
   ```

1. **[Authorized redirect URIs]** (承認済みのリダイレクト URI) で、**[ADD URI]** (URI の追加) を選択します。ユーザープールのドメインの `/oauth2/idpresponse` エンドポイントへのパスを入力します。

   ```
   https://<your-user-pool-domain>/oauth2/idpresponse
   ```

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

1. Google が **[クライアント ID]** と **[クライアントシークレット]** の下に表示する値を安全に保存します。Google IdP を追加するときに、Amazon Cognito にこれらの値を指定します。

### アプリケーションを Apple に登録する
<a name="register-an-app-with-apple"></a>

「Apple でサインイン」を設定する方法についての詳細は、Apple 開発者ドキュメントの「[Configuring Your Environment for Sign in with Apple](https://developer.apple.com/documentation/signinwithapple/configuring-your-environment-for-sign-in-with-apple)」(Apple でサインインするための環境を設定する) を参照してください。

1. [Apple の開発者アカウント](https://developer.apple.com/programs/enroll/)を作成します。

1. Apple 認証情報を使用して[サインイン](https://developer.apple.com/account/#/welcome)します。

1. 左のナビゲーションバーで、**[Certificates, Identifiers & Profiles]** (証明書、ID & プロファイル) を選択します。

1. 左のナビゲーションペインで、**[Identifiers]** (識別子) を選択します。

1. **[Identifiers]** (識別子) ページで、**[\$1]** アイコンを選択します。

1. **[Register a New Identifier]** (新しい識別子の登録) ページで、**[App IDs]** (アプリ ID)、**[Continue]** (続行) の順に選択します。

1. **[種類の選択]** ページで、**[アプリケーション]** を選択し、**[続行]** を選択します。

1. [**Register an App ID**] ページで、次の操作を行います。

   1. **[Description]** (説明) で、説明を入力します。

   1. **[App ID Prefix]** (アプリ ID プレフィックス) に、**[Bundle ID]** (バンドル ID) を入力します。**[App ID Prefix]** (アプリケーション ID プレフィックス) にある値を書き留めておきます。この値は、[ソーシャル IdP を使用してユーザープールを設定する](cognito-user-pools-social-idp.md#cognito-user-pools-social-idp-step-2) で Apple を ID プロバイダーとして選択した後で使用します。

   1. **[Capabilities] ** (機能) で、**[Sign In with Apple]** (Apple でサインイン) を選択してから **[Edit]** (編集) を選択します。

   1. **[Sign in with Apple: App ID Configuration]** (Apple でサインイン: アプリ ID の設定) ページで、アプリをプライマリとして設定するか、他のアプリ ID とグループ化するかを選択し、次に **[Save]** (保存) を選択します。

   1. [**続行**] をクリックしてください。

1. [**Confirm your App ID**] ページで、[**登録**] を選択します。

1. **[Identifiers]** (識別子) ページで、**[\$1]** アイコンを選択します。

1. **[Register a New Identifier]** (新しい識別子の登録) ページで、**[Services IDs]** (サービス ID)、**[Continue]** (続行) の順に選択します。

1. [**Register a Services ID**] ページで、次の操作を行います。

   1. **[Description]** (説明) で、説明を入力します。

   1. **[Identifier]** (識別子) で、識別子を入力します。このサービス ID をメモしておきます。この値が、[ソーシャル IdP を使用してユーザープールを設定する](cognito-user-pools-social-idp.md#cognito-user-pools-social-idp-step-2) で Apple を ID プロバイダーとして選択した後で必要になるからです。

   1. [**Continue (続行)**] を選択し、[**Register (登録)**] を選択します。

1. [識別子] ページから、先ほど作成した [サービス ID] を選択します。

   1. **[Sign In with Apple]** (Apple でサインイン) を選択後、**[Configure] **(設定) を選択します。

   1. **[Web Authentication Configuration]** (ウェブ認証の設定) ページで、**[Primary App ID]** (プライマリアプリ ID) として前に作成したアプリ ID を選択します。

   1. **[Website URLs]** (ウェブサイトの URL) の横の **[\$1]** アイコンを選択します。

   1. **[Domains and subdomains]** (ドメインとサブドメイン) で、`https://` プレフィックスなしでユーザープールのドメインを入力します。

      ```
      <your-user-pool-domain>
      ```

   1. **[Return URLs]** (URL を返す) で、ユーザープールのドメインの `/oauth2/idpresponse` エンドポイントへのパスを入力します。

      ```
      https://<your-user-pool-domain>/oauth2/idpresponse
      ```

   1. **[次へ]** を選択してから、**[完了]** を選択します。ドメインを検証する必要はありません。

   1. **[Continue]** (続行) を選択し、次に **[Save]** (保存) を選択します。

1. 左のナビゲーションペインで **[Keys]** (キー) を選択します。

1. [**Keys (キー)**] ページで、[**\$1**] アイコンを選択します。

1. [**Register a New Key**] ページで、次の操作を行います。

   1. **[Key Name]** (キー名) に、キー名を入力します。

   1. **[Sign In with Apple]** (Apple でサインイン) を選択後、**[Configure]** (設定) を選択します。

   1. **[キーの設定]** ページで、**[プライマリアプリケーション ID]** として前に作成したアプリケーション ID を選択します。**[保存]** を選択します。

   1. **[Continue]** (続行) を選択し、**[Register]** (登録) を選択します。

1. **[キーをダウンロード]** ページで、**[ダウンロード]** をクリックしてプライベートキーをダウンロードしてから、表示される **[キー ID]** を書き留め、**[完了]** を選択します。このプライベートキーと、このページに表示されている **[Key ID]** (キー ID) の値は、[ソーシャル IdP を使用してユーザープールを設定する](cognito-user-pools-social-idp.md#cognito-user-pools-social-idp-step-2) で Apple を ID プロバイダーとして選択した後で必要になります。

## ユーザープールにソーシャル IdP を追加する
<a name="cognito-user-pools-social-step-2"></a>

このセクションでは、前のセクションで取得したクライアント ID およびクライアントシークレットを使用してユーザープールにソーシャル IdP を設定します。

**を使用してユーザープールソーシャル ID プロバイダーを設定するには AWS マネジメントコンソール**

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. **[ソーシャルプロバイダーと外部プロバイダー]** メニューを選択します。**[Federated sign-in]** (フェデレーションサインイン) を検索し、**[Add an identity provider]** (ID プロバイダーの追加) を選択します。

1. ソーシャル ID プロバイダー ([**Facebook**]、[**Google**]、[**Login with Amazon**]、[**Sign in with Apple**]) を選択します。

1. ソーシャル ID プロバイダーの選択に基づいて、次のステップから選択します。
   + **Google** と **Login with Amazon** — 前のセクションで生成された **[アプリケーションクライアント ID]** と **[アプリケーションクライアントのシークレット]** を入力します。
   + **Facebook** — 前のセクションで生成された **[アプリケーションクライアント ID]** と **[アプリケーションクライアントのシークレット]** を入力し、API バージョン (例えば、バージョン 2.12) を選択します。Facebook API の各バージョンにはライフサイクルとサポート終了日があるため、可能な限り最新のバージョンを選択することをお勧めします。Facebook のスコープと属性は API バージョンによって異なる場合があります。Facebook でソーシャル ID ログインをテストして、フェデレーションが意図したとおりに機能することを確認することをお勧めします。
   + **Sign in with Apple** — 以前のセクションで生成された **[サービス ID]**、**[チーム ID]**、**[キー ID]** および **[プライベートキー]** を入力します。

1. 使用する **[認可済みスコープ]** の名前を入力します。スコープは、アプリでアクセスするユーザー属性 (`name` や `email` など) を定義します。Facebook の場合は、コンマで区切る必要があります。Google および Login with Amazon の場合は、スペースで区切って指定します。Sign in with Apple の場合は、アクセスするスコープのチェックボックスをオンにします。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/tutorial-create-user-pool-social-idp.html)

   アプリケーションユーザーは、これらの属性をアプリケーションに提供することに同意するよう求められます。ソーシャルプロバイダーのスコープの詳細については、Google、Facebook、Login with Amazon、および Sign in with Apple のドキュメントを参照してください。

   以下は、Sign in with Apple の場合にスコープが返らない可能性があるユーザーシナリオです。
   + エンドユーザーが Apple のサインインページを離れるとエラーが発生する (Amazon Cognito の内部障害またはデベロッパーが記述したプログラムが原因である可能性があります)。
   + サービス ID 識別子がユーザープールや他の認証サービス全体で使用されている。
   + ユーザーがサインインした後に、デベロッパーがスコープを追加している。ユーザーは認証時およびトークンの更新時にのみ、新しい情報を取得する。
   + デベロッパーによって削除されたユーザーが Apple ID プロファイルからアプリケーションを削除せずに再度サインインしている。

1. ID プロバイダーからユーザープールに属性をマッピングします。詳細については、「[マッピングについて知っておくべきこと](cognito-user-pools-specifying-attribute-mapping.md#cognito-user-pools-specifying-attribute-mapping-requirements)」を参照してください。

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

1. **[アプリケーションクライアント]** メニューで、リストのアプリケーションクライアントから 1 つを選択し、**[ホストされた UI 設定の編集]** を選択します。**[Identity providers]** (ID プロバイダー) で、新しいソーシャル ID プロバイダーをアプリケーションクライアントに追加します。

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

## ソーシャル IdP の設定をテストする
<a name="cognito-user-pools-social-step-3"></a>

前の 2 つのセクションの要素を使用してログイン URL を作成できます。この URL を使用してソーシャル IdP の設定をテストします。

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

ドメインは、コンソールにあるユーザープールの [**ドメイン名**] ページで確認できます。クライアント ID は [**アプリクライアントの設定**] ページにあります。**redirect\$1uri** パラメータのコールバック URL を使用します。これは、ユーザーが認証に成功した後でリダイレクトされるページの URL です。

**注記**  
Amazon Cognito は 5 分以内に完了しない認証リクエストをキャンセルし、ユーザーをマネージドログインにリダイレクトします。ページには、`Something went wrong` というエラーメッセージが表示されます。

# SAML 2.0 ID プロバイダー (IdP) を追加する
<a name="tutorial-create-user-pool-saml-idp"></a>

アプリケーションユーザーは SAML 2.0 ID プロバイダー (IdP) を使用してサインインできます。顧客が組織の内部顧客またはリンクされたビジネスである場合は、ソーシャル IdP ではなく SAML 2.0 IdP を選択できます。ソーシャル IdP がすべてのユーザーにアカウントへの登録を許可する場合、SAML IdP は組織が管理するユーザーディレクトリとペアになる可能性が高くなります。ユーザーが直接サインインしても、サードパーティーを介してサインインしても、すべてのユーザーにはユーザープールにプロファイルがあります。SAML ID プロバイダーを通じてサインインを追加しない場合は、この手順を省略してください。

詳細については、「[ユーザープールによる SAML ID プロバイダーの使用](cognito-user-pools-saml-idp.md)」を参照してください。

SAML ID プロバイダーを更新し、ユーザープールを設定する必要があります。ユーザープールを SAML 2.0 ID プロバイダーの依拠しているパーティーまたはアプリケーションとして追加する方法については、SAML ID プロバイダーのドキュメントを参照してください。

また、SAML ID プロバイダーにアサーションコンシューマーサービス (ACS) エンドポイントを提供する必要があります。SAML ID プロバイダーの SAML 2.0 POST バインド用に、ユーザープールドメインで次のエンドポイントを設定します。ユーザープールドメインの詳細については、「[ユーザープールのドメインを設定する](cognito-user-pools-assign-domain.md)」を参照してください。

```
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://<yourDomainPrefix>.auth.<region>.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://Your custom domain/saml2/idpresponse
```

ユーザープールのドメインプレフィックスとリージョン値は、[Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)の **[ドメイン]** メニューにあります。

SAML ID プロバイダーによっては、オーディエンス URI や SP エンティティ ID とも呼ばれる、サービスプロバイダー (SP) `urn` も指定する必要があります。

```
urn:amazon:cognito:sp:<yourUserPoolID>
```

ユーザープール ID は、[Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)のユーザープールに関する **[概要]** で確認できます。

また、SAML ID プロバイダーを設定して、ユーザープールに必要なすべての属性の属性値を提供する必要もあります。通常、`email` はユーザープールの必須属性です。その場合、SAML ID プロバイダーは、SAML アサーションの `email` 値 (クレーム) を指定する必要があります。

Amazon Cognito ユーザープールはバインディング後のエンドポイントで SAML 2.0 フェデレーションをサポートします。これにより、ユーザープールがユーザーエージェント経由で ID プロバイダーから直接 SAML レスポンスを受信するため、アプリケーションで SAML アサーションレスポンスを受信して解析する必要がなくなります。

**ユーザープールに SAML 2.0 ID プロバイダーを設定する**

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. **[ソーシャルプロバイダーと外部プロバイダー]** メニューを選択します。**[Federated sign-in]** (フェデレーションサインイン) を検索し、**[Add an identity provider]** (ID プロバイダーの追加) を選択します。

1. **[SAML]** ソーシャル ID プロバイダーを選択します。

1. カンマで区切られた **[Identifiers]** (識別子) を入力します。識別子は Amazon Cognito に、ユーザーがサインインしたときに入力したメールアドレスを確認する必要があることを伝えます。次に、ドメインに対応するプロバイダーに誘導します。

1. ユーザーがログアウトしたときに、Amazon Cognito が署名されたサインアウト要求をプロバイダーに送信するためには、**[Add sign-out flow]** (サインアウトフローの追加) を選択します。SAML 2.0 ID プロバイダーを設定して、マネージドログインの設定時に作成した `https://<your Amazon Cognito domain>/saml2/logout` エンドポイントに、サインアウト応答を送信する必要があります。`saml2/logout` エンドポイントでは、POST バインディングを使用します。
**注記**  
このオプションが選択されていて、SAML ID プロバイダーが署名付きログアウトリクエストを期待する場合は、SAML IdP で Amazon Cognito が提供する署名証明書を設定する必要もあります。  
SAML IdP は、署名されたログアウトリクエストを処理し、Amazon Cognito セッションからユーザーをログアウトさせます。

1. **[Metadata document source]** (メタデータドキュメントソース) を選択します。ID プロバイダーがパブリック URL で SAML メタデータを提供する場合は、**[Metadata document URL]** (メタデータドキュメント URL) を選択してそのパブリック URL を入力できます。それ以外の場合は、**[Upload metadata document]** (メタデータドキュメントをアップロード) を選択し、プロバイダーから以前ダウンロードしたメタデータファイルを選択します。
**注記**  
プロバイダーにパブリックエンドポイントがある場合は、ファイルをアップロードするのではなく、メタデータドキュメントの URL を入力することをお勧めします。これにより、Amazon Cognito はメタデータを自動的に更新できます。通常、メタデータの更新は 6 時間ごとまたはメタデータの有効期限が切れる前のいずれか早いタイミングで発生します。

1. **[Map attributes between your SAML provider and your appS]** (AML プロバイダーとアプリケーション間で属性をマッピングする) をクリックして、SAML プロバイダー属性をユーザープールのユーザープロファイルにマッピングします。ユーザープールの必須属性を属性マップに含めます。

   たとえば、**[User pool attribute]** (ユーザープール属性) `email`を選択して、ID プロバイダーからの SAML アサーションに表示される SAML 属性名を入力します。ID プロバイダーは、参考として SAML アサーションのサンプルを提供する場合があります。ID プロバイダーの中には、`email` などのような単純な名前を使用している ID プロバイダーもあります。次の例のように、URL 形式の属性名を使用するものもあります。

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

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