向用户池添加社交身份提供商 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

向用户池添加社交身份提供商

您的 Web 和移动应用程序用户可以通过社交身份提供商 (IdP)(例如 Facebook、Google、Amazon 和 Apple)进行登录。利用内置托管 Web UI,Amazon Cognito 将为所有经过身份验证的用户提供令牌处理和管理,让后端系统能够基于一组用户池令牌实现标准化。您必须启用托管 UI 才能与受支持的社交身份提供商集成。当 Amazon Cognito 构建托管 UI 时,它会创建用于与提供商交换信息的 OAuth 2.0 端点。有关更多信息,请参阅 Amazon Cognito 用户池 Auth API 参考

您可以在Amazon Web Services Management Console中、使用 Amazon CLI 或使用 Amazon Cognito API 调用,添加社交身份提供商。


                社交登录的身份验证概述
注意

通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此功能不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。

先决条件

在开始之前,您需要:

  • 具有应用程序客户端和用户池域的用户池。有关更多信息,请参阅创建用户池

  • 社交身份提供商。

步骤 1:向社交 IdP 注册

在使用 Amazon Cognito 创建社交 IdP 之前,必须向社交 IdP 注册应用程序才能接收客户端 ID 和客户端密钥。

  1. 创建 Facebook 开发人员账户

  2. 使用 Facebook 凭证登录

  3. My Apps (我的应用程序) 菜单上,选择 Create New App (创建新的应用程序)

  4. 输入 Facebook 应用程序的名称,然后选择 Create App ID(创建应用程序 ID)。

  5. 在左侧导航栏上,选择 Settings(设置),然后选择 Basic(基本)。

  6. 记下 App ID (应用程序 ID)App Secret (应用程序密钥)。您将在下一节中使用它们。

  7. 从页面底部选择 + Add Platform (+ 添加平台)

  8. 选择网站

  9. Website(网站)下,请在您的应用程序登录页面上将路径输入到 Site URL(站点 URL)中。

    https://<your_user_pool_domain>/login?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com
  10. 选择保存更改

  11. 在您的用户池域的根目录中,将路径输入到 App Domains(应用程序域)。

    https://<your-user-pool-domain>
  12. 选择保存更改

  13. 从导航栏中,选择 Add Product(添加产品),然后选择 Facebook Login(Facebook 登录)中的 Set up(设置)。

  14. 从导航栏中,选择 Facebook Login (Facebook 登录),然后选择 Settings (设置)

    将用户池域的 /oauth2/idpresponse 端点的路径输入到 Valid OAuth Redirect URIs(有效的 OAuth 重定向 URI)中。

    https://<your-user-pool-domain>/oauth2/idpresponse
  15. 选择保存更改

  1. 创建 Amazon 开发人员账户

  2. 使用 Amazon 凭证登录

  3. 您需要创建一个 Amazon 安全配置文件才能接收 Amazon 客户端 ID 和客户端密钥。

    从页面顶部的导航栏中选择 Apps and Services (应用程序和服务),然后选择 Login with Amazon (以 Amazon 登录)

  4. 选择 Create a Security Profile (创建安全配置文件)

  5. 输入 Security Profile Name(安全配置文件名称)、Security Profile Description(安全配置文件描述)和 Consent Privacy Notice URL(同意隐私声明 URL)。

  6. 选择保存

  7. 选择 Client ID (客户端 ID)Client Secret (客户端密钥) 以显示客户端 ID 和密钥。您将在下一节中使用它们。

  8. 将鼠标悬停在齿轮图标上并选择 Web Settings(Web 设置),然后选择 Edit(编辑)。

  9. 将用户池域输入到 Allowed Origins(允许的源)中。

    https://<your-user-pool-domain>
  10. 将具有 /oauth2/idpresponse 端点的用户池域输入到 Allowed Return URLs(允许的返回 URL)中。

    https://<your-user-pool-domain>/oauth2/idpresponse
  11. 选择保存

  1. 创建 Google 开发人员账户

  2. 使用 Google 凭证登录

  3. 选择 CONFIGURE A PROJECT (配置项目)

  4. 输入项目名称,然后选择 NEXT(下一步)。

  5. 输入产品名称,然后选择 NEXT(下一步)。

  6. Where are you calling from? (从何处调用?) 下拉列表选择 Web browser (Web 浏览器)

  7. 将用户池域输入到 Authorized JavaScript origins(授权的 JavaScript 源)中。

    https://<your-user-pool-domain>
  8. 选择 CREATE(创建)。此步骤中将不使用 Client ID (客户端 ID)Client Secret (客户端密钥)

  9. 选择完成

  10. 登录 Google 控制台。

  11. 在左侧导航栏上,选择 Credentials (凭证)

  12. 通过从 Create credentials (创建凭证) 下拉列表中选择 OAuth client ID (OAuth 客户端 ID) 来创建 OAuth 2.0 凭证。

  13. 选择 Web application (Web 应用程序)

  14. 将用户池域输入到 Authorized JavaScript origins(授权的 JavaScript 源)中。

    https://<your-user-pool-domain>
  15. 将具有 /oauth2/idpresponse 端点的用户池域输入到 Authorized Redirect URIs(授权的重定向 URI)中。

    https://<your-user-pool-domain>/oauth2/idpresponse
  16. 选择 Create (创建) 两次。

  17. 记下 OAuth client ID (OAuth 客户端 ID)client secret (客户端密钥)。您需要在下一节中使用它们。

  18. 选择 OK(确定)。

  1. 创建 Apple 开发人员账户

  2. 使用 Apple 凭证登录

  3. 在左侧导航栏上,选择 Certificates, IDs & Profiles (证书、ID 和配置文件)

  4. 在左侧导航栏上,选择 Identifiers (标识符)

  5. Identifiers (标识符) 页面上,选择 + 图标。

  6. Register a New Identifier (注册新标识符) 页面上,选择 App IDs (应用程序 ID),然后选择 Continue (继续)

  7. Register an App ID (注册应用程序 ID) 页面上,执行以下操作:

    1. 输入 Description (描述)

    2. App ID Prefix(应用程序 ID 前缀)下,输入标识符。记下 App ID Prefix(应用程序 ID 前缀)下的值,因为在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将使用此值。

    3. Capabilities (功能) 下,选择 Sign In with Apple,然后选择 Edit (编辑)

    4. Sign in with Apple: App ID Configuration(Sign in with Apple:应用程序 ID 配置)页面上,为您的应用程序选择适当的设置,然后选择 Save(保存)。

    5. 选择 Continue (继续)

  8. Confirm your App ID (确认您的应用程序 ID) 页面上,选择 Register (注册)

  9. Identifiers(标识符)页面上,将鼠标悬停在页面右侧的 App IDs(应用程序 ID)上,选择 Services IDs(服务 ID),然后选择 + 图标。

  10. Register a New Identifier (注册新标识符) 页面上,选择 Services IDs (服务 ID),然后选择 Continue (继续)

  11. Register an Services ID (注册服务 ID) 页面上,执行以下操作:

    1. 输入 Description (描述)

    2. Identifier(标识符)下,输入标识符。记下此服务 ID,因为在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将使用此值。

    3. 选择 Sign In with Apple,然后选择 Configure (配置)

    4. Web Authentication Configuration (Web 身份验证配置) 页面上,选择 Primary App ID (主应用程序 ID)。在 Web Domain(Web 域)下,输入用户池域。在 Return URLs(返回 URL)下,输入您的用户池域并包含 /oauth2/idpresponse 端点。例如:

      https://<your-user-pool-domain>/oauth2/idpresponse
    5. 选择 Add (添加),然后选择 Save (保存)。您不需要验证域。

    6. 选择 Continue (继续),然后选择 Register (注册)

  12. 在左侧导航栏上,选择 Keys (密钥)

  13. Keys (密钥) 页面上,选择 + 图标。

  14. Register a New Key (注册新密钥) 页面上,执行以下操作:

    1. 输入 Key Name(密钥名称)。

    2. 选择 Sign In with Apple,然后选择 Configure (配置)

    3. Configure Key (配置密钥) 页面上,选择 Primary App ID (主应用程序 ID),然后选择 Save (保存)

    4. 选择 Continue (继续),然后选择 Register (注册)

  15. Download Your Key (下载您的密钥) 页面上,选择 Download (下载) 以下载私有密钥,然后选择 Done (完成)。在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将需要此私有密钥和在此页面上显示的 Key ID (密钥 ID) 值。

步骤 2:将社交 IdP 添加到用户池

Original console

使用 Amazon Web Services Management Console配置用户池社交身份提供商

  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 Manage User Pools (管理用户池)

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

  4. 在左侧导航栏上,选择身份提供商

  5. 选择一个社交身份提供商:FacebookGoogleLogin with AmazonApple

  6. 根据您选择的社交身份提供商,从以下步骤中进行选择:

    • GoogleLogin with Amazon – 输入在上一部分中生成的 app client ID(应用程序客户端 ID)和 app client secret(应用程序客户端密钥)。

    • Facebook – 输入在上一部分中生成的 app client ID(应用程序客户端 ID)和 app client secret(应用程序客户端密钥),然后选择 API 版本(例如,版本 2.12)。我们建议选择最新的可用版本,因为每个 Facebook API 版本都有一个生命周期和一个弃用日期。Facebook 的范围和属性可能因 API 版本而异。我们建议您使用 Facebook 测试您的社交身份登录,以确保联合会按预期运行。

    • Sign In with Apple – 输入在上一部分中生成的 Services ID(服务 ID)、Team ID(团队 ID)、Key ID(密钥 ID)和 private key(私有密钥)。

  7. 输入要授权的范围的名称。范围定义了您要通过应用程序访问的用户属性 (如 nameemail)。对于 Facebook,这些属性应用逗号分隔。对于 Google 和 Login with Amazon,则应采用空格分隔。对于“使用 Apple 登录”,选中要访问的范围的复选框。

    社交身份提供商 示例范围
    Facebook public_profile, email
    Google profile email openid
    Login with Amazon profile postal_code
    使用 Apple 登录 email name

    您的应用程序用户需要同意向您的应用程序提供这些属性。关于范围的更多信息,请参阅 Google、Facebook 和 Login with Amazon 或“使用 Apple 登录”的文档。

    对于 Sign in with Apple,下面提供了可能不会返回范围的用户场景:

    • 终端用户离开 Apple 登录页面后出现故障(可能来自 Amazon Cognito 内部的故障或开发人员编写的任何内容)

    • 跨用户池和其它身份验证服务使用服务 ID 标识符

    • 在最终用户登录之前,开发人员添加了其他范围(未检索到新信息)

    • 开发人员删除用户,然后用户再次登录,而没有从其 Apple ID 个人资料中删除该应用程序

  8. 为您要配置的社交身份提供商选择 Enable (启用)

  9. 从导航栏中选择 App client settings (应用程序客户端设置)

  10. 选择社交身份提供商作为用户池应用程序的启用身份提供商之一。

  11. 在用户池应用程序的 Callback URL(s)(回调 URL)中输入回调 URL。这是您的用户在身份验证成功后将被重新导向的 URL。

    https://www.example.com
  12. 选择保存更改

  13. Attribute mapping 选项卡上,至少为必需属性添加映射,通常是 email,如下所示:

    1. 选中此复选框以选择 Facebook、Google 或 Amazon 属性名称。您还可以键入未在 Amazon Cognito 控制台中列出的其他属性的名称。

    2. 从下拉列表中选择目标用户池属性。

    3. 选择保存更改

    4. 选择转到摘要页面

New console

使用 Amazon Web Services Management Console配置用户池社交身份提供商

  1. 转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。

  2. 选择 User Pools(用户池)。

  3. 从列表中选择现有用户池,或 create a user pool(创建用户池)。

  4. 选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。

  5. 选择一个社交身份提供商:FacebookGoogleLogin with AmazonSign in with Apple

  6. 根据您选择的社交身份提供商,从以下步骤中进行选择:

    • GoogleLogin with Amazon – 输入在上一部分中生成的 app client ID(应用程序客户端 ID)和 app client secret(应用程序客户端密钥)。

    • Facebook – 输入在上一部分中生成的 app client ID(应用程序客户端 ID)和 app client secret(应用程序客户端密钥),然后选择 API 版本(例如,版本 2.12)。我们建议选择最新的可用版本,因为每个 Facebook API 版本都有一个生命周期和一个弃用日期。Facebook 的范围和属性可能因 API 版本而异。我们建议您使用 Facebook 测试您的社交身份登录,以确保联合会按预期运行。

    • Sign In with Apple – 输入在上一部分中生成的 Services ID(服务 ID)、Team ID(团队 ID)、Key ID(密钥 ID)和 private key(私有密钥)。

  7. 输入要使用的 Authorized scopes(授权范围)的名称。范围定义了您要通过应用程序访问的用户属性 (如 nameemail)。对于 Facebook,这些属性应用逗号分隔。对于 Google 和 Login with Amazon,则应采用空格分隔。对于“使用 Apple 登录”,选中要访问的范围的复选框。

    社交身份提供商 示例范围
    Facebook public_profile, email
    Google profile email openid
    Login with Amazon profile postal_code
    使用 Apple 登录 email name

    您的应用程序用户需要同意向您的应用程序提供这些属性。关于社交服务提供商范围的更多信息,请参阅 Google、Facebook 和 Login with Amazon 或 Sign in with Apple 的文档。

    对于 Sign in with Apple,下面提供了可能不会返回范围的用户场景:

    • 终端用户离开 Apple 登录页面后出现故障(可能来自 Amazon Cognito 内部的故障或开发人员编写的任何内容)

    • 跨用户池和/或其它身份验证服务使用服务 ID 标识符

    • 在最终用户登录之前,开发人员添加了其他范围(未检索到新信息)

    • 开发人员删除用户,然后用户再次登录,而没有从其 Apple ID 个人资料中删除该应用程序

  8. 请将身份提供商的属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射

  9. 选择创建

  10. App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的社交身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。

  11. 选择保存更改

步骤 3:测试社交 IdP 配置

可以通过使用前两节中的元素来创建登录 URL。使用此 URL 测试社交 IdP 配置。

https://<your_user_pool_domain>/login?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com

您可以在用户池域名控制台页上找到您的域。client_id 位于应用程序客户端设置页上。对于 redirect_uri 参数,使用您的回调 URL。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。

注意

5 分钟内未完成的请求将被取消,并重定向至登录页面,然后会显示 Something went wrong 错误消息。