我想在 Amazon Cognito 用户池中使用 Google 作为联合身份提供者(IdP)。
解决方法
创建一个包含应用程序客户端和域名的 Amazon Cognito 用户群体
请完成以下步骤:
- 创建新的用户池。
**注意:**创建用户群体时,系统会默认选择标准属性 email 。
- 在用户池中创建一个应用程序客户端。
- 为用户池添加域名。
创建 Google API 控制台项目
请完成以下步骤:
- 使用 Google 账户登录 Google API 控制台。有关更多信息,请参阅 Google Help 网站上的 Manage APIs in the API console。
- 在控制面板(API 和服务)上,选择创建。
- 在新建项目中,输入项目名称。
- 在位置中,选择浏览,然后选择一个位置。
- 选择创建。
有关更多信息,请参阅 Google Identity 网站上的 Sign in with Google for web 文档。
配置 OAuth 同意屏幕
请完成以下步骤:
- 打开 Google API 控制台,然后在左侧导航窗格中选择 OAuth 同意屏幕。
- 填写同意表单上的以下必填字段:
对于应用名称,请输入一个名称。
对于已获授权的域,输入 amazoncognito.com。
**重要事项:**必须输入此域,这样在创建 OAuth 客户端 ID 时才能使用Amazon Cognito 域。
- 选择保存。
有关更多信息,请参阅 Google Workspace 网站上的 Complete the OAuth consent screen。
获取 OAuth 2.0 客户端凭证
请完成以下步骤:
- 打开 Google API 控制台,然后在凭证页面上选择创建凭证。
- 选择 OAuth 客户端 ID。
- 对于创建 OAuth 客户端 ID 页面上的应用类型,选择 Web 应用。
- 输入以下信息:
对于名称,请输入 OAuth 客户端 ID 的名称。
对于已获授权的 JavaScript 来源,请输入 Amazon Cognito 域,例如:
注意:请将 yourDomainPrefix 和 region 替换为用户池的值。要查找这些值,请打开 Amazon Cognito 控制台并导航到用户池的域名页面。
对于已获授权的重定向 URI**,输入 **
**注意:**请将 yourDomainPrefix 和 region 替换为用户池的值。
- 在 OAuth 客户端对话框中,记下客户端 ID 和客户端密钥,以便在后续步骤中使用。
有关更多信息,请参阅 Google Identity 网站上的使用 OAuth 2.0 访问 Google API。
在用户池中将 Google 配置为联合 IdP
请完成以下步骤:
- 打开 Amazon Cognito 控制台,然后选择用户池。
- 选择您的用户池。
- 选择登录体验选项卡。
- 在联合身份提供者登录下,选择添加身份提供者。
- 选择 Google。
- 在使用此用户池设置 Google 联合身份验证下,输入以下信息:
对于客户端 ID,输入您记下的客户端 ID。
对于客户端密钥,输入记下的客户端密钥。
对于授权范围,输入个人资料电子邮件 OpenID。
- 在 Google 和用户池之间映射属性下,将 email 的用户池属性映射到 email 的 Google 属性。
- 选择添加其他属性,然后将 username 的用户池属性映射到 username 的 Google 属性。
- 选择添加身份提供者。
更改用户池的应用程序客户端设置
**注意:**在应用程序客户端设置中,映射的用户池属性必须是可写入的。有关更多信息,请参阅 Specifying identity provider attribute mappings for your user pool。
请完成以下步骤:
- 打开 Amazon Cognito 控制台,然后选择您的用户池。
- 选择应用程序集成选项卡。
- 在应用程序客户端列表下,选择创建应用程序客户端。
- 输入以下信息:
对于应用程序类型,选择公共客户端,然后输入应用程序客户端的名称。
对于身份验证流程,选择 ALLOW_USER_PASSWORD_AUTH 和 ALLOW_REFRESH_TOKEN_AUTH。
在允许的****回调 URL 中,输入您希望用户在登录后重定向到的 URL。要进行测试,请输入有效的 URL,如
在注销 URL** 中,输入您希望用户在注销后被重定向到的 URL。要进行测试,请输入有效 URL,例如
对于身份提供者**,选择 Cognito 用户池和 Google。
对于 OAuth 2.0 授权类型,选择隐式授权。
对于 OpenID Connect 范围,选择 email、openid 和 profile。
**重要事项:**隐式授权 OAuth 流程仅用于测试目的。对于生产系统,最佳实践是使用授权码的授权类型。
- 选择创建应用程序客户端。
有关更多信息,请参阅应用程序客户端术语。
构造端点 URL
要为 Amazon Cognito 托管的 Web UI 构建登录端点 URL,请使用用户池的值。
示例 URL:
注意:请将 yourDomainPrefix 和 region 替换为用户池的值。要查找这些值,请打开 Amazon Cognito 控制台,导航到用户池的域名页面。将 yourClientId 替换为 Amazon Cognito 应用程序客户端 ID,将 redirectUrl 替换为应用程序客户端的回调 URL。在用户池的应用程序客户端设置页面上找到这些值。
有关详细信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?和 Login endpoint。
测试端点 URL
请完成以下步骤:
- 在 Web 浏览器中输入登录端点 URL。
- 在登录端点网页上,选择使用 Google 继续。
**注意:**如果您被重定向到 Amazon Cognito 应用程序客户端的回调 URL,则表示您已在浏览器中登录了 Google 账户。用户池令牌会显示在 Web 浏览器地址栏的 URL 中。
- 在使用 Google 登录下,选择您的 Google 账户并登录。
进行身份验证后,会被重定向到 Amazon Cognito 应用程序客户端的回调 URL。用户池发出的 JSON Web 令牌(JWT)会显示在 Web 浏览器地址栏的 URL 中。
**注意:**JavaScript 开发工具包会生成登录端点的 URL。还会解析 URL 中的 JWT 令牌。
相关信息
Using social identity providers with a user pool
Adding user pool sign-in through a third party