本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在用户池中使用社交身份提供商
您的 Web 和移动应用程序用户可以通过社交身份提供商 (IdP)(例如 Facebook、Google、Amazon 和 Apple)进行登录。利用内置托管 Web UI,Amazon Cognito 将为所有经过身份验证的用户提供令牌处理和管理。这样,后端系统可以基于一组用户池令牌实现标准化。您必须启用托管 UI 才能与受支持的社交身份提供商集成。当 Amazon Cognito 构建您的托管用户界面时,它会创建 OAuth 2.0 个终端节点,Amazon Cognito 和OIDC您以及 IdPs 社交使用这些终端节点来交换信息。有关更多信息,请参阅 Amazon Cognito 用户池身份验证API参考。
你可以在中添加社交 IdP AWS Management Console,也可以使用或 Amazon Cogn AWS CLI ito。API
注意
通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此特征不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。
先决条件
在开始之前,您需要:
-
具有应用程序客户端和用户池域的用户池。有关更多信息,请参阅创建用户池。
-
社交 IdP。
步骤 1:向社交 IdP 注册
在使用 Amazon Cognito 创建社交 IdP 之前,必须向社交 IdP 注册应用程序才能接收客户端 ID 和客户端密钥。
-
创建 Facebook 开发人员账户
。 -
使用 Facebook 凭证登录
。 -
在 My Apps(我的应用程序)菜单上,选择 Create New App(创建新的应用程序)。
-
输入 Facebook 应用程序的名称,然后选择 Create App ID(创建应用程序 ID)。
-
在左侧导航栏上,选择 Settings(设置),然后选择 Basic(基本)。
-
记下 App ID(应用程序 ID)和 App Secret(应用程序密钥)。您将在下一节中使用它们。
-
从页面底部选择 + Add Platform(+ 添加平台)。
-
选择 Website(网站)。
-
在 “网站” 下,输入您的应用程序登录页面的路径,进入网站URL。
https://
mydomain.us-east-1.amazoncognito.com
/login?response_type=code&client_id=1example23456789
&redirect_uri=https://www.example.com
-
选择 Save changes(保存更改)。
-
在您的用户池域的根目录中,将路径输入到 App Domains(应用程序域)。
https://
mydomain.us-east-1.amazoncognito.com
-
选择 Save changes(保存更改)。
-
从导航栏中,选择 Add Product(添加产品),然后选择 Facebook Login(Facebook 登录)中的 Set up(设置)。
-
从导航栏中,选择 Facebook Login(Facebook 登录),然后选择 Settings(设置)。
在有效OAuth重定向中输入您的用户池域的
/oauth2/idpresponse
终端节点路径URIs。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse -
选择 Save changes(保存更改)。
-
创建 Amazon 开发人员账户
。 -
使用 Amazon 凭证登录
。 -
您需要创建一个 Amazon 安全配置文件才能接收 Amazon 客户端 ID 和客户端密钥。
从页面顶部的导航栏中选择 Apps and Services(应用程序和服务),然后选择 Login with Amazon。
-
选择 Create a Security Profile(创建安全配置文件)。
-
输入安全配置文件名称、安全配置文件描述和同意隐私声明URL。
-
选择 Save(保存)。
-
选择 Client ID(客户端 ID)和 Client Secret(客户端密钥)以显示客户端 ID 和密钥。您将在下一节中使用它们。
-
将鼠标悬停在齿轮图标上并选择 Web Settings(Web 设置),然后选择 Edit(编辑)。
-
将用户池域输入到 Allowed Origins(允许的源)中。
https://
mydomain.us-east-1.amazoncognito.com
-
在 “允许的返回” 中输入您的用户池域和
/oauth2/idpresponse
终端节点URLs。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse -
选择 Save(保存)。
有关 Google Cloud 平台中 OAuth 2.0 的更多信息,请参阅 Google Workspace 开发者版文档中的了解身份验证和授权
-
创建 Google 开发人员账户
。 -
从顶部导航栏中,选择 Select a project(选择项目)。如果您在 Google 平台中已经有项目,则此菜单会改为显示您的默认项目。
-
选择NEWPROJECT。
-
输入产品的名称,然后选择CREATE。
-
在左侧导航栏上,选择APIs和服务,然后选择 Oauth 同意屏幕。
-
输入应用程序信息,App domain(应用程序域)、Authorized domains(已授权的域)和 Developer contact information(开发人员联系信息)。例如,您的 Authorized domains(已授权的域)必须包括
amazoncognito.com
和自定义域的根,例如example.com
。选择SAVEANDCONTINUE。 -
1. 在 “范围” 下,选择 “添加或移除范围”,然后至少选择以下OAuth范围。
-
.../auth/userinfo.email
-
.../auth/userinfo.profile
-
openid
-
-
在 Test users(测试用户)下,选择 Add users(添加用户)。输入您的电子邮件地址和任何其他授权测试用户,然后选择SAVEANDCONTINUE。
-
再次展开左侧导航栏,选择APIs和服务,然后选择凭证。
-
选择 CREATECREDENTIALS,然后选择OAuth客户端 ID。
-
选择 Application type(应用程序类型)并为客户端提供 Name(名称)。
-
在 “授权 JavaScript 来源” 下,选择ADDURI。输入用户群体域。
https://
mydomain.us-east-1.amazoncognito.com
-
在 “授权重定向” 下URIs,选择ADDURI。输入指向用户群体域的
/oauth2/idpresponse
端点的路径。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse -
选择CREATE。
-
安全地存储 Google 在 Your client ID(您的客户端 ID)和 Your client secret(您的客户端密钥)下显示的值。当您添加 Google IdP 时,请向 Amazon Cognito 提供这些值。
有关设置 “使用 Apple 登录” 的 up-to-date更多信息,请参阅 Apple 开发者文档中的配置环境以使用 Apple 登录
-
创建 Apple 开发人员账户
。 -
使用 Apple 凭证登录
。 -
在左侧导航栏上,选择 Certificates, Identifiers & Profiles(证书、标识符和配置文件)。
-
在左侧导航栏上,选择 Identifiers (标识符)。
-
在 Identifiers (标识符) 页面上,选择 + 图标。
-
在 “注册新标识符” 页面上,选择 “应用程序”IDs,然后选择 “继续”。
-
在 Select a type(选择类型)页面上,选择 App(应用程序),然后选择 Continue(继续)。
-
在 Register an App ID(注册应用程序 ID)页面上,执行以下操作:
-
在 Description(说明)下,输入说明。
-
在 App ID Prefix(应用程序 ID 前缀)下,输入 Bundle ID(捆绑包 ID)。记下 App ID Prefix(应用程序 ID 前缀)下的值。在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将使用此值。
-
在 Capabilities(功能)下,选择 Sign In with Apple,然后选择 Edit(编辑)。
-
在 “使用 Apple 登录:应用程序 ID 配置” 页面上,选择将应用程序设置为主应用程序或与其他应用程序分组IDs,然后选择 “保存”。
-
选择 Continue(继续)。
-
-
在 Confirm your App ID(确认您的应用程序 ID)页面上,选择 Register(注册)。
-
在 Identifiers (标识符) 页面上,选择 + 图标。
-
在 “注册新标识符” 页上,选择 “服务”IDs,然后选择 “继续”。
-
在 Register an Services ID(注册服务 ID)页面上,执行以下操作:
-
在 Description(描述)下方,键入描述。
-
在 Identifier(标识符)下方,键入标识符。记下此服务 ID,因为在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后需要此值。
-
选择 Continue(继续),然后选择 Register(注册)。
-
-
从 Identifiers(标识符)页中选择您刚创建的 Services ID(服务 ID)。
-
选择 Sign In with Apple(使用苹果账号登录),然后选择 Configure(配置)。
-
在 Web Authentication Configuration(Web 身份验证配置)页上,选择您先前创建的应用程序 ID 作为 Primary App ID(主应用程序 ID)。
-
选择 “网站” 旁边的 “+” 图标URLs。
-
在 Domains and subdomains(域名和子域)下,输入不带
https://
前缀的用户群体域。mydomain.us-east-1.amazoncognito.com
-
在 Return 下URLs,输入您的用户池域
/oauth2/idpresponse
终端节点的路径。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse -
选择 Next(下一步),然后选择 Done(完成)。您不需要验证域。
-
选择 Continue(继续),然后选择 Save(保存)。
-
-
在左侧导航栏上,选择 Keys (密钥)。
-
在 Keys(密钥)页面上,选择 + 图标。
-
在 Register a New Key(注册新密钥)页面上,执行以下操作:
-
在 Key Name(密钥名称)下,输入密钥名称。
-
选择 Sign In with Apple,然后选择 Configure(配置)。
-
在 Configure Key(配置密钥)页上,选择您先前创建的应用程序 ID 作为 Primary App ID(主应用程序 ID)。选择保存。
-
选择 Continue(继续),然后选择 Register(注册)。
-
-
在 Download Your Key(下载您的密钥)页面上,选择 Download(下载)以下载私有密钥并记下显示的 Key ID(密钥 ID),然后选择 Done(完成)。在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将需要此私有密钥和在此页面上显示的 Key ID(密钥 ID)值。
步骤 2:将社交 IdP 添加到用户池
要配置用户池社交 IdP,请使用 AWS Management Console
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入您的 AWS 凭据。 -
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。
-
选择一个社交 IdP:Facebook、Google(谷歌)、Login with Amazon(使用亚马逊账号登录)或 Sign in with Apple(使用苹果账号登录)。
-
根据您选择的社交 IdP,从以下步骤中进行选择:
-
Google 和 Login with Amazon – 输入在上一部分中生成的 app client ID(应用程序客户端 ID)和 app client secret(应用程序客户端密钥)。
-
Facebook — 输入在上一节中生成的应用程序客户端 ID 和应用程序客户端密钥,然后选择一个API版本(例如,版本 2.12)。我们建议您选择最新的版本,因为每个 Facebook API 都有生命周期和停产日期。Facebook 的范围和属性可能因API版本而异。我们建议您使用 Facebook 测试您的社交身份登录,以确保联合身份认证会按预期运行。
-
Sign In with Apple – 输入在上一部分中生成的 Services ID(服务 ID)、Team ID(团队 ID)、Key ID(密钥 ID)和 private key(私有密钥)。
-
-
输入要使用的 Authorized scopes(授权范围)的名称。范围定义了您要通过应用程序访问的用户属性(如
name
和email
)。对于 Facebook,这些属性应用逗号分隔。对于 Google 和 Login with Amazon,则应采用空格分隔。对于 Sign in with Apple,选中要访问的范围的复选框。社交身份提供商 示例范围 Facebook public_profile, email
Google profile email openid
Login with Amazon profile postal_code
Sign in with Apple email name
您的应用程序用户需要同意向您的应用程序提供这些属性。关于社交服务提供商范围的更多信息,请参阅 Google、Facebook 和 Login with Amazon 或 Sign in with Apple 的文档。
对于 Sign in with Apple,下面提供了可能不会返回范围的用户场景:
-
终端用户离开 Apple 登录页面后出现故障(可能来自 Amazon Cognito 内部的故障或开发人员编写的任何内容)
-
跨用户池和/或其它身份验证服务使用服务 ID 标识符
-
在最终用户登录之前,开发人员添加了其他范围(未检索到新信息)
-
开发人员删除用户,然后用户再次登录,而没有从其 Apple ID 个人资料中删除该应用程序
-
-
请将 IdP 的属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射。
-
选择 Create(创建)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的社交 IdP 添加到 Identity providers(身份提供商)下的应用程序客户端。
-
选择 Save changes(保存更改)。
步骤 3:测试社交 IdP 配置
您可以使用前两节中的元素来创建登录名URL。使用此 URL 测试社交 IdP 配置。
https://
mydomain.us-east-1.amazoncognito.com
/login?response_type=code&client_id=1example23456789
&redirect_uri=https://www.example.com
您可以在用户池 Domain name(域名)控制台页上找到您的域。client_id 位于 App client settings(应用程序客户端设置)页上。使用 redirect_uri 参数的回调URL。这是成功URL进行身份验证后您的用户将被重定向的页面。
注意
Amazon Cognito 会取消未在 5 分钟内完成的身份验证请求,并将用户重定向到托管 UI。页面随即显示 Something went wrong
错误消息。