

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

# 將社交登入新增至您的使用者集區
<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`」錯誤訊息。