本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将社交登录添加到您的用户池
让用户能够通过其现有的公共或社交身份提供商登录您的应用程序,可以改善他们的身份验证体验。Amazon Cognito 用户池与 Facebook、Google、Amazon 和 Apple 等热门社交身份提供商 (IdPs) 集成,为您的用户提供了他们已经熟悉的便捷登录选项。
当你设置社交登录时,你为用户提供了一种替代方案,而不仅仅是为你的应用程序创建专用账户。这可以提高转化率,使注册过程更加顺畅。从用户的角度来看,他们可以应用现有的社交凭据来快速进行身份验证,而无需记住其他用户名和密码。
在用户池中配置社交 IdP 涉及几个关键步骤。您必须向社交服务提供商注册您的应用程序才能获得客户端 ID 和密钥。然后,您可以将社交 IdP 配置添加到您的用户池中,指定要请求的范围以及要从 IdP 属性映射的用户池属性。在运行时,Amazon Cognito 会处理与提供商的令牌交换,映射用户属性,并以共享用户池格式向您的应用程序发放令牌。
向社交 IdP 注册
在使用 Amazon Cognito 创建社交 IdP 之前,必须向社交 IdP 注册应用程序才能接收客户端 ID 和客户端密钥。
-
创建 Facebook 开发人员账户
。 -
使用 Facebook 凭证登录
。 -
在 My Apps(我的应用程序)菜单上,选择 Create New App(创建新的应用程序)。
如果你没有现有的Facebook应用程序,你会看到一个不同的选项。选择 Create App (创建应用程序)。
-
在创建应用程序页面上,为您的应用程序选择一个用例,然后选择下一步。
-
输入 Facebook 应用程序的名称,然后选择创建应用程序。
-
在左侧导航栏上,选择应用程序设置,然后选择基本。
-
记下 App ID(应用程序 ID)和 App Secret(应用程序密钥)。您将在下一节中使用它们。
-
从页面底部选择 + 添加平台。
-
在 “选择平台” 屏幕上,选择您的平台,然后选择 “下一步”。
-
选择 Save changes(保存更改)。
-
为 App Domains(应用程序域)输入用户池域。
https://
your_user_pool_domain
-
选择 Save changes(保存更改)。
-
从导航栏中选择 “产品”,然后选择 “通过 Facebook 登录进行配置”。
-
从 Facebook 登录的配置菜单中,选择设置。
在 “有效重定向” URL 中输入您的OAuth重定向URIs。重定向URL由您的用户池域和
/oauth2/idpresponse
终端节点组成。https://
your_user_pool_domain
/oauth2/idpresponse -
选择 Save changes(保存更改)。
-
创建 Amazon 开发人员账户
。 -
使用 Amazon 凭证登录
。 -
您需要创建一个 Amazon 安全配置文件才能接收 Amazon 客户端 ID 和客户端密钥。
从页面顶部的导航栏中选择 “应用程序和服务”,然后选择 Lo gin with Amazon。
-
选择 Create a Security Profile(创建安全配置文件)。
-
输入安全配置文件名称、安全配置文件描述和同意隐私声明URL。
-
选择 Save(保存)。
-
选择 Client ID(客户端 ID)和 Client Secret(客户端密钥)以显示客户端 ID 和密钥。您将在下一节中使用它们。
-
将鼠标悬停在齿轮图标上并选择 Web Settings(Web 设置),然后选择 Edit(编辑)。
-
将用户池域输入到 Allowed Origins(允许的源)中。
https://
<your-user-pool-domain>
-
在 “允许的返回” 中输入您的用户池域和
/oauth2/idpresponse
终端节点URLs。https://
<your-user-pool-domain>
/oauth2/idpresponse -
选择 Save(保存)。
有关 Google Cloud 平台中 OAuth 2.0 的更多信息,请参阅 Google Workspace 开发者版文档中的了解身份验证和授权
-
创建 Google 开发人员账户
。 -
从顶部导航栏中,选择 Select a project(选择项目)。如果您在 Google 平台中已经有项目,则此菜单会改为显示您的默认项目。
-
选择NEWPROJECT。
-
输入产品的名称,然后选择CREATE。
-
在左侧导航栏上,选择APIs和服务,然后选择 Oauth同意屏幕。
-
输入应用程序信息、应用程序域、授权域名和开发者联系信息。您的授权域名必须包含您的自定义域名
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://
<your-user-pool-domain>
-
在 “授权重定向” 下URIs,选择ADDURI。输入指向用户群体域的
/oauth2/idpresponse
端点的路径。https://
<your-user-pool-domain>
/oauth2/idpresponse -
选择CREATE。
-
安全地存储 Google 在您的客户端 ID 和您的客户端密钥下显示的值。当您添加 Google IdP 时,请向 Amazon Cognito 提供这些值。
有关设置“通过 Apple 登录”的更多信息,请参阅 Apple 开发人员文档中的配置环境以通过 Apple 登录
-
创建 Apple 开发人员账户
。 -
使用 Apple 凭证登录
。 -
在左侧导航栏上,选择 Certificates, Identifiers & Profiles(证书、标识符和配置文件)。
-
在左侧导航栏上,选择 Identifiers (标识符)。
-
在 Identifiers (标识符) 页面上,选择 + 图标。
-
在 “注册新标识符” 页面上,选择 “应用程序”IDs,然后选择 “继续”。
-
在 “选择类型” 页面上,选择 “应用程序”,然后选择 “继续”。
-
在 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,因为在中选择 Apple 作为身份提供商后,您将需要此值步骤 2:将社交 IdP 添加到用户池。
-
选择 Continue (继续),然后选择 Register (注册)。
-
-
从标识符页面选择您刚刚创建的服务 ID。
-
选择 Sign In with Apple(使用苹果账号登录),然后选择 Configure(配置)。
-
在 Web Authentication Configuration(Web 身份验证配置)页上,选择您先前创建的应用程序 ID 作为 Primary App ID(主应用程序 ID)。
-
选择 “网站” 旁边的 “+” 图标URLs。
-
在 Domains and subdomains(域名和子域)下,输入不带
https://
前缀的用户群体域。<your-user-pool-domain>
-
在 Return 下URLs,输入您的用户池域
/oauth2/idpresponse
终端节点的路径。https://
<your-user-pool-domain>
/oauth2/idpresponse -
选择 “下一步”,然后选择 “完成”。您不需要验证域。
-
选择 Continue(继续),然后选择 Save(保存)。
-
-
在左侧导航栏上,选择 Keys (密钥)。
-
在 Keys(密钥)页面上,选择 + 图标。
-
在 Register a New Key(注册新密钥)页面上,执行以下操作:
-
在 Key Name(密钥名称)下,输入密钥名称。
-
选择 Sign In with Apple,然后选择 Configure(配置)。
-
在配置密钥页面上,选择您之前创建的应用程序 ID 作为主应用程序 ID。选择保存。
-
选择 Continue(继续),然后选择 Register(注册)。
-
-
在 “下载您的密钥” 页面上,选择 “下载” 以下载私钥,记下显示的密钥 ID,然后选择 “完成”。在步骤 2:将社交 IdP 添加到用户池中选择 Apple 作为身份提供商后,您将需要此私有密钥和在此页面上显示的 Key ID(密钥 ID)值。
将社交 IdP 添加到用户池
在本节中,您使用上一节中的客户端 ID 和客户端密钥在用户池中配置社交 IdP。
使用配置用户池社交身份提供商 AWS Management Console
-
转到 Amazon Cognito 控制台
。系统可能会提示您输入 AWS 凭证。 -
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。
-
选择一个社交身份提供商:Facebook、Google、Login with Amazon 或 Sign in with Apple。
-
根据您选择的社交身份提供商,从以下步骤中进行选择:
-
Google 和 L ogin with Amazon — 输入在上一节中生成的应用程序客户端 ID 和应用程序客户端密钥。
-
Facebook — 输入在上一节中生成的应用程序客户端 ID 和应用程序客户端密钥,然后选择一个API版本(例如,版本 2.12)。我们建议选择可能的最新版本——每个 Facebook API 都有生命周期和弃用日期。Facebook 的范围和属性可能因API版本而异。我们建议您使用 Facebook 测试您的社交身份登录,以确保联合会按预期运行。
-
使用 Apple 登录 — 输入在上一节中生成的服务 ID、团队 ID、密钥 ID 和私钥。
-
-
输入要使用的授权范围的名称。范围定义了您要通过应用程序访问的用户属性(如
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 个人资料中删除该应用程序。
-
-
请将身份提供商的属性映射到您的用户池。有关更多信息,请参阅 有关映射的需知信息。
-
选择 Create(创建)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的社交身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。
-
选择 Save changes(保存更改)。
测试社交 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
错误消息。