

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用者集區入門
<a name="getting-started-user-pools"></a>

您有一個應用程式需要身分驗證和存取控制。您可以在 OpenID Connect (OIDC) 架構中用於單一登入 (SSO)。Amazon Cognito 具有使用 AWS SDK 在應用程式後端處理身分驗證邏輯的工具，以及用於叫用用戶端中的瀏覽器來存取受管授權伺服器。

Amazon Cognito 主控台會引導您從偏好的應用程式架構檢視建立使用者集區。從那裡，您可以繼續新增功能，例如使用外部[社交](tutorial-create-user-pool-social-idp.md)或 [SAML 2.0 ](tutorial-create-user-pool-saml-idp.md)身分提供者 (IdPs) 的聯合登入。Amazon Cognito 主控台中的應用程式模型倚賴將 OIDC 程式庫新增至您的專案並叫用瀏覽器。

當您努力擴展功能集並納入更多 Amazon Cognito 元件時，請閱讀 [Amazon Cognito 使用者集](cognito-user-pools.md)區章節，了解您可以使用使用者集區執行的所有操作的完整說明。

本章和 Amazon Cognito 主控台中的範例示範應用程式資源與 Amazon Cognito 使用者集區的基本整合。稍後，您可以調整使用者集區，以使用更多可供您使用的選項。然後，您可以更新您的應用程式以採用新功能並與 IdPs 互動。

如果您不想使用[受管登入頁面](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 身分驗證和授權與 Web 和行動應用程式整合](cognito-integrate-apps.md)

**為您的應用程式建立 Amazon Cognito 資源**

1. 導覽至 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/)。若要將許可指派給您的 IAM 主體，以便他們可以建立和管理 Amazon Cognito 資源，請參閱 [AWS Amazon Cognito 的 受管政策](security-iam-awsmanpol.md)。`AmazonCognitoPowerUser` 政策足以建立使用者集區。

1. 從**使用者集區功能表中選取建立****使用者集區**，或選取**五分鐘內免費開始使用**。

1. 在**定義應用程式**下，選擇最適合您要為其建立身分驗證和授權服務之應用程式案例**的應用程式類型**。

1. 在**為您的應用程式命名**中，輸入描述性名稱或繼續使用預設名稱。

1. 您必須在支援建立使用者集區後無法變更的設定**選項**下進行一些基本選擇。

   1. 在**登入識別符的選項**下，告訴我們您要如何在使用者登入時識別使用者。您可以偏好使用者產生的使用者名稱、電子郵件地址或電話號碼。您也可以允許多個選項的組合。Amazon Cognito 接受您在[受管登入](cognito-user-pools-managed-login.md)表單的使用者名稱欄位中在此處設定的選項。

   1. 在**註冊的必要屬性**下，告訴我們當使用者註冊新帳戶時，您要收集哪些使用者資訊。在受管登入頁面中，Amazon Cognito 會顯示所有必要屬性的提示。

      **登入識別碼的選項**會影響您所需的屬性。**使用者名稱**需要每個使用者的電子郵件或電話屬性，以便他們可以在電子郵件或簡訊中接收密碼重設代碼。**電子郵件**需要電子郵件屬性，**而電話號碼**需要電話號碼屬性。

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 會使用應用程式類型的預設設定來建立使用者集區和應用程式用戶端。您可以在建立初始資源後設定其他選項，例如[外部身分提供者](cognito-user-pools-identity-federation.md)和[多重要素驗證 (MFA)](user-pool-settings-mfa.md#user-pool-configuring-mfa)。

1. 在**設定應用程式**頁面上，您可以立即取得應用程式的程式碼範例。若要探索您的新使用者集區，請向下捲動並選取**前往概觀**。

1. 若要在相同的使用者集區中新增更多應用程式，請導覽至**應用程式用戶端**選單，並新增新的應用程式用戶端。這將重複以應用程式為中心的建立程序，但只會將新的應用程式用戶端新增至現有的使用者集區。

使用此程序建立使用者集區和一或多個應用程式用戶端之後，您可以使用受管登入開始測試身分驗證操作。這些快速入門選項開放給公有自我註冊。我們建議您使用主控台程序建立測試環境，然後將最終設計移至生產環境。花時間熟悉 Amazon Cognito 的功能。然後，若要移至生產工作負載，請製作自訂組態，並使用 AWS CloudFormation 和 等自動化工具進行部署 AWS Cloud Development Kit (AWS CDK)。

Amazon Cognito 在此程序中會進行您無法反轉的一些預設組態。如需您無法變更的使用者集區設定，以及您可以在主控台中選擇的選項的詳細資訊，請參閱 [更新使用者集區和應用程式用戶端組態](cognito-user-pool-updating.md)。


| 設定 | Effect | 如何變更 | 其他資訊 | 
| --- | --- | --- | --- | 
| Client secret (用戶端密碼) | 在身分驗證請求中需要用戶端秘密雜湊。 | 使用傳統 Web 應用程式或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>

您可能擁有要與 Amazon Cognito 身分驗證整合的現有應用程式 UI。相較於 Amazon Cognito 使用者集區，您甚至可能擁有功能較低的現有身分驗證頁面。您可以使用適用於各種程式設計語言的 Amazon Cognito 整合 AWS SDKs將身分驗證元件新增至此類型的應用程式。一些範例如下。

如果您在 Amazon Cognito 主控台中為此目的建立使用者集區，則可能不需要擁有託管互動式登入頁面和 OpenID Connect (OIDC) 服務[的使用者集區網域](cognito-user-pools-assign-domain.md)。在主控台中建立使用者集區的程序會自動為您產生網域。您可以從使用者集區的網域索引標籤刪除此**網域**。其他選項包括使用 API 請求 AWS SDKs 和 CLI 中的自動設定選項，為您的應用程式以程式設計方式建立 AWS Amplify Amazon Cognito 資源。如需詳細資訊，請參閱[將 Amazon Cognito 身分驗證和授權與 Web 和行動應用程式整合](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 是適用於 Web 和行動應用程式的 JavaScript 型程式庫，著重於使用者介面 (UI)。此範例應用程式示範 Amazon Cognito 使用者集區的一些基本功能。如果您已使用 React 開發 Web 應用程式，[請從 GitHub 下載範例應用程式](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/cognito-identity-provider/scenarios/cognito-developer-guide-react-example)。

下列螢幕擷取畫面是您將建立之應用程式中的初始身分驗證頁面。

![\[以 React 為基礎的範例 Web 應用程式的註冊頁面螢幕擷取畫面。\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/cognito-getting-started-react-app-running.png)


若要設定此應用程式，您的使用者集區必須符合下列要求：
+ 使用者可以使用其電子郵件地址登入。**Cognito 使用者集區登入選項**：**電子郵件**。
+ 使用者名稱不區分大小寫。**使用者名稱要求**：未選取**使用者名稱區分大小寫**。
+ 不需要多重要素驗證 (MFA)。**MFA 強制執行**：**選用 MFA**。
+ 您的使用者集區會使用電子郵件訊息驗證使用者設定檔確認的屬性。**要驗證的屬性**：**傳送電子郵件訊息、驗證電子郵件地址**。
+ 電子郵件是唯一必要的屬性。**必要屬性**：**電子郵件**。
+ 使用者可以在使用者集區中註冊自己。**自我註冊**：選取**啟用自我註冊**。
+ 您的初始應用程式用戶端是公有用戶端，允許使用使用者名稱和密碼登入。**應用程式類型**：**公有用戶端**、**身分驗證流程**：`ALLOW_USER_PASSWORD_AUTH`。

### 建立應用程式
<a name="getting-started-test-application-react-create-app"></a>

若要建置此應用程式，您必須設定開發人員環境。開發人員環境需求如下：

1. Node.js 已安裝並更新。

1. 已安裝節點套件管理員 (npm)，並至少更新至 10.2.3 版。

1. 環境可在網頁瀏覽器的 TCP 連接埠 5173 上存取。

**建立 React Web 應用程式範例**

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. `YOUR_AWS_REGION` 將 取代為 AWS 區域 程式碼。例如：`us-east-1`。

   1. `YOUR_COGNITO_USER_POOL_ID` 將 取代為您指定用於測試的使用者集區的 ID。例如：`us-east-1_EXAMPLE`。使用者集區必須位於您在上一個步驟中輸入 AWS 區域 的 中。

   1. `YOUR_COGNITO_APP_CLIENT_ID` 將 取代為您指定用於測試的應用程式用戶端 ID。例如：`1example23456789`。應用程式用戶端必須位於上一個步驟的使用者集區中。

1. 如果您想要從 以外的 IP 存取範例應用程式`localhost`，請編輯`package.json`並將該行變更為 `"dev": "vite",` `"dev": "vite --host 0.0.0.0",`。

1. 安裝您的應用程式。

   ```
   npm install
   ```

1. 啟動應用程式。

   ```
   npm run dev
   ```

1. 在 `http://localhost:5173`或 的 Web 瀏覽器中存取應用程式`http://[IP address]:5173`。

1. 使用有效的電子郵件地址註冊新使用者。

1. 從電子郵件訊息擷取確認碼。在應用程式中輸入確認碼。

1. 使用您的使用者名稱和密碼登入。

### 使用 建立 React 開發人員環境 Amazon Lightsail
<a name="getting-started-test-application-react-lightsail"></a>

開始使用此應用程式的快速方法是使用 建立虛擬雲端伺服器Amazon Lightsail。

使用 Lightsail，您可以快速建立已預先設定此範例應用程式的先決條件的小型伺服器執行個體。您可以使用瀏覽器型用戶端將 SSH 連線到執行個體，並在公有或私有 IP 地址連線至 Web 伺服器。

**為此範例應用程式建立Lightsail執行個體**

1. 前往 [Lightsail 主控台](https://lightsail.aws.amazon.com/ls/webapp/)。如果出現提示，請輸入您的 AWS 登入資料。

1. 選擇 **建立執行個體**。

1. 針對**選取平台**，選擇 **Linux/Unix**。

1. 針對**選取藍圖**，選擇 **Node.js**。

1. 在**識別您的執行個體**下，為您的開發環境提供易記的名稱。

1. 選擇 **建立執行個體**。

1. 在 建立您的執行個體Lightsail之後，選取它，然後從 **Connect** 索引標籤中選擇**使用 SSH 連線**。

1. SSH 工作階段會在瀏覽器視窗中開啟。執行 `node -v`和 `npm -v` 以確認您的執行個體已佈建 Node.js 和 10.2.3 的最低 npm 版本。

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/zh_tw/cognito/latest/developerguide/images/cognito-getting-started-android-app-running.png)


若要設定此應用程式，您的使用者集區必須符合下列要求：
+ 使用者可以使用其電子郵件地址登入。**Cognito 使用者集區登入選項**：**電子郵件**。
+ 使用者名稱不區分大小寫。**使用者名稱需求**：未選取**使用者名稱區分大小寫**。
+ 不需要多重要素驗證 (MFA)。**MFA 強制執行**：**選用 MFA**。
+ 您的使用者集區會使用電子郵件訊息驗證使用者設定檔確認的屬性。**要驗證的屬性**：**傳送電子郵件訊息、驗證電子郵件地址**。
+ 電子郵件是唯一必要的屬性。**必要屬性**：**電子郵件**。
+ 使用者可以在使用者集區中註冊自己。**自我註冊**：選取**啟用自我註冊**。
+ 您的初始應用程式用戶端是公有用戶端，允許使用使用者名稱和密碼登入。**應用程式類型**：**公有用戶端**、**身分驗證流程**：`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 取代 和 。 IDs 

1. 安裝 [Flutter](https://docs.flutter.dev/get-started/install)。

   1. 將 Flutter 新增至 PATH 變數。

   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/zh_tw/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/zh_tw/cognito/latest/developerguide/images/cognito-getting-started-android-app-start.png)圖示。

   1. 在 CLI 中，執行 `flutter run`。

1. 導覽至您在 Android Studio 中執行的虛擬裝置。

1. 使用有效的電子郵件地址註冊新使用者。

1. 從電子郵件訊息擷取確認碼。在應用程式中輸入確認碼。

1. 使用您的使用者名稱和密碼登入。

# 將更多功能和安全性選項新增至您的使用者集區
<a name="user-pool-next-steps"></a>

遵循教學課程完成範例應用程式後，您可以擴大使用者集區實作的範圍。或者，如果您未建立測試應用程式，請根據您的偏好設定建立新的使用者集區。您可以自訂其他應用程式的使用者集區功能，或[新增外部身分提供者](tutorial-create-user-pool-social-idp.md)。當您規劃將 Amazon Cognito 使用者集區放入生產應用程式時，您可以評估[其他範例和教學](cognito-guided-setup.md)課程。

如果您的下一個優先順序是在使用者集區中檢查和套用應用程式安全選項，請參閱 [Amazon Cognito 使用者集區的安全最佳實務](user-pool-security-best-practices.md)。

Amazon Cognito 具有功能計劃，可在您選擇加入更高層時新增功能和安全性選項。您可以從 *Lite* 計劃開始，使用 *Essentials* 計劃新增進階身分驗證和授權選項，以及使用 *Plus* 計劃新增自動原因安全防護機制。如需詳細資訊，請參閱[使用者集區功能計劃](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 服務 後存取其他 ，請參閱 [登入後 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 身分提供者](tutorial-create-user-pool-saml-idp.md)

# 將社交登入新增至您的使用者集區
<a name="tutorial-create-user-pool-social-idp"></a>

讓使用者能夠透過現有的公有或社交登入您的應用程式，身分提供者可以改善他們的身分驗證體驗。Amazon Cognito 使用者集區與 Facebook、Google、Amazon 和 Apple 等熱門的社交身分提供者 (IdPs) 整合，為您的使用者提供他們已經熟悉的便捷登入選項。

當您設定社交登入時，您會為使用者提供僅為您的應用程式建立專用帳戶的替代方案。這可以改善轉換率，並讓註冊程序更順暢。從使用者的角度來看，他們可以套用現有的社交登入資料以快速進行身分驗證，而不需要記住另一個使用者名稱和密碼。

在使用者集區中設定社交 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** (我的應用程式) 選單中，選擇 **Create New App** (建立新的應用程式)。

   如果您沒有現有的 Facebook 應用程式，您會看到不同的選項。選擇 **Create App (建立應用程式)**。

1. 在**建立應用程式**頁面上，選擇應用程式的使用案例，然後選擇**下一步**。

1. 輸入您 Facebook 應用程式的名稱，然後選擇**建立應用程式 ID**。

1. 在左側導覽列中，選擇**應用程式設定**，然後選擇**基本**。

1. 記下 **App ID (應用程式 ID)** 和 **App Secret (應用程式秘密)**。您會在下一節中用到它們。

1. 從頁面底部選擇 **\$1 新增平台**。

1. 在**選取平台**畫面上，選取您的平台，然後選擇**下一步**。

1. 選擇**儲存變更**。

1. 對於 **App Domains** (應用程式網域)，輸入您的使用者集區網域。

   ```
   https://your_user_pool_domain
   ```

1. 選擇**儲存變更**。

1. 從導覽列中，選擇**產品**，然後選擇從 **Facebook Login** **設定**。

1. 從 **Facebook 登入**、**設定**選單中，選擇**設定**。

   在 **Valid OAuth Redirect URIs** (有效的 OAuth 重新引導 URI) 中輸入您的重新導向 URL。重新導向 URL 包含使用者集區網域與`/oauth2/idpresponse`端點。

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

1. 選擇**儲存變更**。

### 向 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 安全性設定檔以便接收 Amazon 用戶端 ID 和用戶端秘密。

   從頁面頂端的導覽列中選擇**應用程式和服務**，然後選擇**使用 Amazon 登入**。

1. 選擇 **Create a Security Profile** (建立安全性設定檔)。

1. 輸入 **Security Profile Name** (安全設定檔名稱)、**Security Profile Description** (安全設定檔描述) 和 **Consent Privacy Notice URL** (同意隱私權聲明 URL)。

1. 選擇**儲存**。

1. 選擇 **Client ID** (用戶端 ID) 和 **Client Secret** (用戶端秘密)，以顯示用戶端 ID 和秘密。您會在下一節中用到它們。

1. 將滑鼠移到齒輪圖示上方並選擇 **Web Settings** (Web 設定)，然後選擇 **Edit** (編輯)。

1. 在 **Allowed Origins** (允許的來源) 中輸入您的使用者集區網域。

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

1. 在 **Allowed Return URLs** (允許的傳回 URL) 中輸入具有 `/oauth2/idpresponse` 端點的使用者集區網域。

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

1. 選擇**儲存**。

### 向 Google 註冊應用程式
<a name="register-an-app-with-google"></a>

如需 Google Cloud Platform 中 OAuth 2.0 的詳細資訊，請參閱 Google Workspace for Developers 文件中的[瞭解身分驗證和授權](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. 在左側導覽列上，選擇 **APIs和服務**，然後選擇**聲明同意畫面**。

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** (新增使用者)。輸入您的電子郵件地址和任何其他授權的測試使用者，然後選擇**儲存並繼續**。

1. 再次展開左側導覽列，選擇 **APIs和服務**，然後選擇**登入資料**。

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. 選擇 **CREATE**。

1. 安全地儲存 Google 在**您的用戶端 ID**和**您的用戶端密碼**下顯示的值。當您新增 Google IdP 時，請將這些值提供給 Amazon Cognito。

### 向 Apple 註冊應用程式
<a name="register-an-app-with-apple"></a>

如需設定 Sign of Apple 的詳細資訊，請參閱 Apple Developer 文件中的[設定 Sign in with Apple 的環境](https://developer.apple.com/documentation/signinwithapple/configuring-your-environment-for-sign-in-with-apple)。

1. [向 Apple 建立開發人員帳戶](https://developer.apple.com/programs/enroll/)。

1. 使用您的 Apple 憑證[登入](https://developer.apple.com/account/#/welcome)。

1. 在左側導覽列上，選擇 **Certificates, Identifiers & Profiles (憑證、識別碼與設定檔)**。

1. 在左側導覽列上，選擇 **Identifiers** (識別碼)。

1. 在 **Identifiers (識別碼)** 頁面上，選擇 **\$1** 圖示。

1. 在 **Register a New Identifier** (註冊新的識別碼) 頁面上，選擇 **App IDs** (應用程式 ID)，然後選擇 **Continue** (繼續)。

1. 在**選取類型**頁面上，選擇**應用程式**，然後選擇**繼續**。

1. 在 **Register an App ID** (註冊應用程式 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 作為您的身分提供者之後，您將會使用此值。

   1. 在 **Capabilities** (功能) 下方，選擇 **Sign In with Apple**，然後選擇 **Edit** (編輯)。

   1. 在 **Sign in with Apple: App ID Configuration** (Sign in with Apple：應用程式 ID 組態) 頁面上，選擇將應用程式設定為主要應用程式或與其他應用程式 ID 群組，然後選擇 **Save** (儲存)。

   1. 選擇**繼續**。

1. 在 **Confirm your App ID** (確認您的應用程式 ID) 頁面上，選擇 **Register** (註冊)。

1. 在 **Identifiers** (識別碼) 頁面上，選擇 **\$1** 圖示。

1. 在 **Register a New Identifier** (註冊新的識別碼) 頁面上，選擇 **Services IDs** (服務 ID)，然後選擇 **Continue** (繼續)。

1. 在 **Register a Services ID** (註冊服務 ID) 頁面上，執行下列操作：

   1. 在 **Description** (描述) 下方輸入描述。

   1. 在 **Identifier** (識別符) 中，輸入識別符。請記下此服務 ID，因為在 中選擇 Apple 做為身分提供者之後，您將需要此值[使用社交 IdP 設定您的使用者集區](cognito-user-pools-social-idp.md#cognito-user-pools-social-idp-step-2)。

   1. 選擇 **Continue (繼續)**，然後選擇 **Register (註冊)**。

1. 選擇您剛從識別符頁面建立的服務 ID。

   1. 選取 **Sign In with Apple**，然後選擇 **Configure** (設定)。

   1. 在 **Web Authentication Configuration** (Web 身分驗證組態) 頁面上，選取您稍早建立的應用程式 ID 作為 **Primary App 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**，然後選擇 **Configure** (設定)。

   1. 在**設定金鑰**頁面上，選取您先前建立做為**主要應用程式 ID 的應用程式 ID**。選擇**儲存**。

   1. 選擇 **Continue** (繼續)，然後選擇 **Register** (註冊)。

1. 在**下載您的金鑰**頁面上，選擇**下載**以下載私有金鑰，記下顯示的**金鑰 ID**，然後選擇**完成**。您在 [使用社交 IdP 設定您的使用者集區](cognito-user-pools-social-idp.md#cognito-user-pools-social-idp-step-2) 中選擇 Apple 當作身分提供者後，需有此頁面上顯示的私有金鑰和 **Key ID (金鑰 ID)** 值。

## 新增社交 IdP 到您的使用者集區
<a name="cognito-user-pools-social-step-2"></a>

在本節中，您會使用上一節的用戶端 ID 和用戶端密碼，在使用者集區設定社交 IdP。

**使用 設定使用者集區社交身分提供者 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** (新增身分提供者)。

1. 選擇社交身分提供者：**Facebook**、**Google**、**Login with Amazon** 或 **Sign in with Apple**。

1. 根據您選擇的社交身分提供者，從以下步驟中選擇：
   + **Google** 和 **Login with Amazon** – 輸入上一節產生的**應用程式用戶端 ID** 和**應用程式用戶端秘密**。
   + **Facebook** – 輸入上一節產生的**應用程式用戶端 ID** 和**應用程式用戶端秘密**，然後選擇 API 版本 （例如 2.12 版）。我們建議選擇最新的可能版本 - 每個 Facebook API 都有生命週期和棄用日期。Facebook 範圍和屬性可以根據 API 版本而有所不同。建議您使用 Facebook 測試您的社交身分登入，以確保聯合使用正常運作。
   + **使用 Apple 登入** – 輸入上一節產生的**服務 ID**、**團隊 ID**、**金鑰 ID** 和**私有金鑰**。

1. 輸入您要使用的**已授權範圍**名稱。範圍可定義您要透過應用程式來存取的使用者屬性 (例如 `name` 和 `email`)。若為 Facebook，這些屬性應以逗號分隔。若為 Google 和登入 Amazon，則應以空格分隔。若為 Sign in with Apple，請針對您想要存取的範圍勾選核取方塊。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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. 將身分提供者的屬性映射至您的使用者集區。如需詳細資訊，請參閱[對應的須知事項](cognito-user-pools-specifying-attribute-mapping.md#cognito-user-pools-specifying-attribute-mapping-requirements)。

1. 選擇**建立**。

1. 從**應用程式用戶端**功能表中，選擇清單中的其中一個應用程式用戶端，並**編輯託管 UI 設定**。將新的社交身分提供者新增至 **Identity providers** (身分提供者) 下的應用程式用戶端。

1. 選擇**儲存變更**。

## 測試社交 IdP 組態
<a name="cognito-user-pools-social-step-3"></a>

您可以使用前兩節的元素建立登入 URL。用來測試社交 IdP 組態。

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

您可以在使用者集區 **Domain name** (網域名稱) 主控台頁面上尋找您的網域。client\$1id 位於 **App client settings** (應用程式用戶端設定) 頁面上。將您的回呼 URL 使用於 **redirect\$1uri** 參數。這是您的使用者成功身分驗證後會被重新導向的頁面 URL。

**注意**  
Amazon Cognito 會取消未在 5 分鐘內完成的身分驗證請求，並將使用者重新導向至受管登入。此頁面人會顯示「`Something went wrong`」錯誤訊息。

# 新增 SAML 2.0 身分提供者
<a name="tutorial-create-user-pool-saml-idp"></a>

您的應用程式使用者可以使用 SAML 2.0 身分提供者 (IdP) 登入。當您的客戶是組織的內部客戶或連結的企業時，您可以透過 IdPs 社交 IdP 選擇 SAML 2.0 IdPs。當社交 IdP 允許所有使用者註冊帳戶時，SAML IdP 更可能與組織控制的使用者目錄配對。無論您的使用者直接或透過第三方間接登入，所有使用者在使用者集區中都有設定檔。如果您不想新增透過 SAML 身分提供者，請略過此步驟。

如需詳細資訊，請參閱[搭配使用者集區使用 SAML 身分提供者](cognito-user-pools-saml-idp.md)。

您必須更新 SAML 身分提供者並設定您的使用者集區。如需有關如何將使用者集區新增為 SAML 2.0 身分提供者之依賴方或應用程式的資訊，請參閱 SAML 身分提供者的文件。

您還必須向 SAML 身分提供者提供聲明消費者服務 (ACS) 端點。在 SAML 身分提供者中為 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 身分提供者，您也需要提供服務提供者 (SP) `urn`，也稱為對象 URI 或 SP 實體 ID，格式為：

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

您可以在 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)的使用者集區的**概觀**儀表板中找到您的使用者集區 ID。

您也應配置 SAML 身分提供者，以為您的使用者集區中的任何必要屬性提供屬性值。通常 `email` 為使用者集區必要的屬性。此情況下，SAML 身分提供者應在 SAML 聲明中提供 `email` 值 (宣告)。

Amazon Cognito 使用者集區支援與 POST 繫結端點進行 SAML 2.0 聯合。這不需要您的應用程式擷取或剖析 SAML 聲明回應，因為使用者集區會透過使用者代理程式直接從您的身分提供者接收 SAML 回應。

**在您的使用者集區中配置 SAML 2.0 身分提供者**

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** (新增身分提供者)。

1. 選擇 **SAML** 社交身分提供者。

1. 輸入以逗號分隔的 **Identifiers** (識別符)。識別符告知 Amazon Cognito 應該檢查使用者登入時輸入的電子郵件地址。然後，它會引導他們前往與其網域對應的提供者。

1. 如果您希望 Amazon Cognito 在使用者登出時傳送已簽署的登出請求給您的供應商，則請選擇 **Add sign-out flow** (新增登出流程)。您必須設定 SAML 2.0 身分提供者，將登出回應傳送至設定受管登入時建立的`https://<your Amazon Cognito domain>/saml2/logout`端點。`saml2/logout` 端點使用 POST 繫結。
**注意**  
如果選取此選項，且您的 SAML 身分提供者預期有簽署的登出請求，您也需要使用 SAML IdP 設定 Amazon Cognito 提供的簽署憑證。  
SAML IdP 會處理已簽署的登出請求，並將您的使用者從 Amazon Cognito 工作階段登出。

1. 選擇 **Metadata document source** (中繼資料文件來源)。如果您的身分提供者以公有 URL 提供 SAML 中繼資料，則可以選擇 **Metadata document URL (中繼資料文件 URL)**，然後輸入該公有 URL。否則，請選擇 **Upload metadata document** (上傳中繼資料文件)，然後選取您先前從供應商處下載的中繼資料檔案。
**注意**  
如果您的提供者有公有端點，而不是上傳檔案，建議您輸入中繼資料文件 URL。這可讓 Amazon Cognito 自動重新整理中繼資料。通常每 6 小時或是在中繼資料過期之前 (取較早的時間) 重新整理中繼資料。

1. 選擇 **Map attributes between your SAML provider and your app** (在 SAML 供應商與應用程式之間映射屬性)，將 SAML 供應商屬性映射至使用者集區中的使用者描述檔。在屬性映射中包含您的使用者集區必要屬性。

   例如，當您選擇 **User pool attribute** (使用者集區屬性) `email` 時，隨著身分提供者 SAML 聲明中顯示的 SAML 屬性名稱輸入 SAML 屬性名稱。您的身分提供者可能會提供範例 SAML 聲明以供參考。有些身分供應商會使用簡單的名稱，例如 `email`，而其他供應商則會使用 URL 格式的屬性名稱，例如下列範例：

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

1. 選擇**建立**。