如何在 Amazon Cognito 用户池中将 Google 设置为联合身份提供商?
上次更新日期:2021 年 7 月 20 日
我想将 Google 用作 Amazon Cognito 用户池中的联合身份提供商 (IdP)。该如何设置?
解决方法
Amazon Cognito 用户池允许通过第三方 (联合身份验证) 登录,包括 Google 和 Facebook 等社交 IdP。有关更多信息,请参阅向用户池添加社交身份提供商。
创建含有应用程序客户端和域名的 Amazon Cognito 用户池
- 创建用户池。
注意:在创建过程中,默认选择标准属性 email(电子邮件)。有关更多信息,请参阅配置用户池属性。 - 在用户池中创建应用程序客户端。有关更多信息,请参阅添加应用程序以启用托管 Web UI。
- 为用户池添加域名。
创建 Google API 控制台项目
如果还没有项目,请创建一个新的。
- 使用您的 Google 账户登录到 Google API 控制台。有关更多信息,请参阅 Google 帮助网站上的在 API 控制台中管理 API。
- 在控制面板(API 与服务)上,选择 CREATE(创建)。
- 在新建项目下,输入项目名称。
- 对于位置,选择浏览,然后选择一个位置。
- 选择创建。
有关更多信息,请参阅“将 Google Sign-In 用于网站”网站上的将 Google Sign-In 集成到您的 Web 应用程序中部分。
配置 OAuth 同意屏幕
- 在 Google API 控制台的左侧导航窗格中,选择 OAuth 同意屏幕。
- 填写同意屏幕表单。请至少执行以下操作:
对于应用程序名称,输入名称。
对于授权域,输入 amazoncognito.com。
重要提示:您必须输入此域,否则以后在创建 OAuth 客户端 ID 时将无法使用 Amazon Cognito 域。 - 选择 Save(保存)。您将重定向到凭证页面。
有关更多信息,请参阅 Google Apps Script 网站上的完成 OAuth 同意屏幕部分。
获取 OAuth 2.0 客户端凭证
- 在 Google API 控制台的凭证页上,选择创建凭证,然后选择 OAuth 客户端 ID。
- 在创建 OAuth 客户端 ID 页面上,对于应用程序类型,选择 Web 应用程序。
- 执行以下操作:
输入 OAuth 客户端 ID 的名称。
对于授权的 JavaScript 来源,输入您的 Amazon Cognito 域 (https://yourDomainPrefix.auth.region.amazoncognito.com)。
注意:请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的这些值。
对于授权的重定向 URL,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/idpresponse。
注意:请将 yourDomainPrefix 和 region 替换为您的用户池的值。有关更多信息,请参阅上一步。 - 在 OAuth 客户端对话框中,找到客户端 ID 和客户端密钥,然后记下它们以备后用。在 Amazon Cognito 用户池中配置 Google 时,将需要这些信息。
有关更多信息,请参阅 Google Identity Platform 网站上的使用 OAuth 2.0 访问 Google API 部分。
在您的用户池中将 Google 配置为联合 IdP
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格的联合身份下,选择身份提供商。
- 选择 Google。
- 执行以下操作:
对于 Google App ID,粘贴您记下的客户端 ID。
对于 App 密钥,粘贴记下的客户端密钥。
对于授权范围,输入配置文件电子邮件 openid。 - 选择 Enable Google(启用 Google)。
有关更多信息,请参阅将社交 IdP 添加到您的用户池。
将电子邮件从 Google 属性映射到用户池属性
注意:在属性映射中,映射的用户池属性必须是可变的。有关更多信息,请参阅为用户池指定身份提供商属性映射。
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格的联合下,选择属性映射。
- 在“属性映射”页面上,选择 Google 选项卡。
- 选中名为电子邮件的 Google 属性旁边的捕获复选框。
- 在电子邮件旁边,对于用户池属性,从列表中选择电子邮件。
- 选择 Save changes(保存更改)。
更改您的用户池的应用程序客户端设置
注意:在应用程序客户端设置中,映射的用户池属性必须可写。有关更多信息,请参阅为用户池指定身份提供商属性映射。
- 在 Amazon Cognito 控制台中,选择 Manage user pools (管理用户池),然后选择您的用户池。
- 在左侧导航窗格中,在应用程序集成中,选择应用程序客户端设置。
- 在应用程序客户端页面上,执行以下操作:
在启用身份提供商下,选中 Google 复选框。
对于回调 URL,输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://www.example.com/。
对于注销 URL,输入您希望用户在退出登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://www.example.com/。
在允许的 OAuth 流程下,选中 Implicit grant(隐式授予)复选框。
在允许的 OAuth 范围下,选中 email(电子邮件)、openid 和profile(配置文件)复选框。
重要提示:隐式授予 OAuth 流程仅用于测试目的。最佳实践是对生产系统使用授权码授予。有关更多信息,请参阅了解 Amazon Cognito 用户池 OAuth 2.0 授权。 - 选择 Save changes(保存更改)。
有关更多信息,请参阅应用程序客户端设置概览。
构建终端节点 URL
使用用户池中的值,为 Amazon Cognito 托管的 Web UI 构造此登录终端节点 URL:
https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
确保执行以下操作:
- 请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中的域名页面上,您可以找到您的用户池的这些值。
- 将 yourClientId 替换为您的 Amazon Cognito 应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。在 Amazon Cognito 控制台中,进入您的用户池的应用程序客户端设置页面可以找到这些信息。
有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及登录终端节点。
测试终端节点 URL
- 在您的 Web 浏览器中输入构建的登录终端节点 URL。
- 在您的登录终端节点网页上,选择使用 Google 继续。
注意:如果您被重定向至您的 Amazon Cognito 应用程序客户端的回调 URL,则表示您已经在浏览器中登录您的 Google 账户。用户池令牌显示在 Web 浏览器地址栏的 URL 中。 - 在使用 Google 登录下,选择您的 Google 账户并登录。
成功验证身份后,您将被重定向到您的 Amazon Cognito 应用程序客户端的回调 URL。用户池发出的 JSON Web 令牌 (JWT) 显示在 Web 浏览器地址栏的 URL 中。
注意:在实际的 Web 应用程序中,登录终端节点的 URL 是由 JavaScript 开发工具包生成的,该 JavaScript 开发工具包还负责解析 URL 中的 JWT 令牌。