如何在 Amazon Cognito 用户池中将 Google 设置为联合身份提供者?

3 分钟阅读
0

我想在 Amazon Cognito 用户池中使用 Google 作为联合身份提供者(IdP)。

解决方法

Amazon Cognito 用户池允许通过第三方(联合身份验证)登录,包括 Google 或 Facebook 等社交 IdP。有关更多信息,请参阅 Adding social identity providers to a user pool

创建一个包含应用程序客户端和域名的 Amazon Cognito 用户池

  1. 创建用户池
    **注意:**在创建过程中,默认选择标准属性 email。有关详细信息,请参阅 User pool attributes
  2. 在您的用户池中创建一个应用程序客户端。有关更多信息,请参阅 Add an app to turn on the hosted web UI
  3. 为您的用户池添加域名

创建 Google API 控制台项目

如果您已有项目,请创建一个新项目:

  1. 使用您的 Google 账户登录 Google API 控制台。有关更多信息,请参阅 Google Help 网站上的 Manage APIs in the API console
  2. 控制面板API 和服务)上,选择创建
  3. 新建项目中,输入项目名称
  4. 位置中,选择浏览,然后选择一个位置。
  5. 选择创建

有关更多信息,请参阅 Google Identity 网站上的 Sign In with Google for Web 文档。

配置 OAuth 同意屏幕

  1. 在 Google API 控制台的左侧导航窗格中,选择 OAuth 同意屏幕
  2. 填写同意屏幕表单。请至少执行以下操作:
    对于应用名称,输入一个名称。
    对于已获授权的网域,输入 amazoncognito.com
    **重要提示:**您必须输入此域,否则以后在创建 OAuth 客户端 ID 时将无法使用 Amazon Cognito 域
  3. 选择保存。您将被重定向到凭据页面。

有关更多信息,请参阅 Google Workspace 网站上的 Complete the OAuth consent screen

获取 OAuth 2.0 客户端凭据

  1. 在 Google API 控制台的凭据页面上,选择**创建凭据。**然后,选择 OAuth 客户端 ID
  2. 创建 OAuth 客户端 ID 页面上,对于应用类型,选择 Web 应用
  3. 请执行以下操作:
    对于 OAuth 客户端 ID 输入名称
    对于已获授权的 JavaScript 来源,输入您的 Amazon Cognito 域。例如:https://yourDomainPrefix.auth.region.amazoncognito.com
    注意:请将 yourDomainPrefixregion 替换为您的用户池的值。在 Amazon Cognito 控制台域名页面上找到您的用户池的这些值。
    对于已获授权的重定向 URI,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/idpresponse
    **注意:**请将 yourDomainPrefixregion 替换为您的用户池的值。有关更多信息,请参阅上一步。
  4. OAuth 客户端对话框中,找到客户端 ID 和客户端密钥,然后记下来备用。在 Amazon Cognito 用户池中配置 Google 时,将需要这些信息。

有关更多信息,请参阅 Google Identity 网站上的使用 OAuth 2.0 访问 Google API

在您的用户池中将 Google 配置为联合 IdP

  1. Amazon Cognito 控制台中,选择用户池
  2. 选择要使用的用户池。
  3. 选择登录体验选项卡。
  4. 联合身份提供者登录下,选择添加身份提供者
  5. 选择 Google。然后,在使用此用户池设置 Google 联合身份验证下:
    对于客户端 ID,粘贴您在之前步骤中记下的客户端 ID。
    对于客户端密钥,粘贴您在之前步骤中记下的客户端密钥。
    对于授权范围,输入个人资料电子邮件 OpenID。
  6. 在 Google 和您的用户池之间映射属性下:
    对于用户池属性 email,将其映射到 Google 属性 email
    选择添加其他属性,然后将用户池属性 username 映射到 Google 属性 username
  7. 选择添加身份提供者

更改用户池的应用程序客户端设置

**注意:**在应用程序客户端设置中,映射的用户池属性必须是可编辑的。有关更多信息,请参阅 Specifying identity provider attribute mappings for your user pool

  1. Amazon Cognito 控制台中,选择您的用户池。
  2. 选择应用程序集成选项卡。
  3. 应用程序客户端列表下,选择创建应用程序客户端
  4. 对于“应用程序类型”,选择公共客户端。然后,为您的应用程序客户端输入名称。
    对于身份验证流程,选择 ALLOW_USER_PASSWORD_AUTHALLOW_REFRESH_TOKEN_AUTH
    允许的****回调 URL 中,输入您希望用户在登录后重定向到的 URL。要进行测试,输入任何有效的 URL,例如 https://www.example.com/。
    对于注销 URL,输入您希望用户在退出登录后重定向到的 URL。要进行测试,输入任何有效的 URL,例如 https://www.example.com/
    对于身份提供者,选择 Cognito 用户池Google
    对于 OAuth 2.0 授权类型,选择隐式授权
    对于 OpenID Connect 范围,选择 emailopenid 和 **profile。
    重要提示:**隐式授权 OAuth 流程仅用于测试目的。对于生产系统,最佳实践是使用授权码进行授权。
  5. 选择创建应用程序客户端

有关更多信息,请参阅 App client settings terminology

构造端点 URL

使用用户池中的值,为 Amazon Cognito 托管的 Web UI 构造此登录端点 URL:https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl

注意:请将 yourDomainPrefixregion 替换为您的用户池的值。在 Amazon Cognito 控制台域名页面上找到您的用户池的这些值。将 yourClientId 替换为您的 Amazon Cognito 应用程序客户端 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。在 Amazon Cognito 控制台的应用程序客户端设置页面上找到您的用户池的这些值。

有关详细信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?Login endpoint

测试端点 URL

  1. 在 Web 浏览器中输入构造的登录端点 URL。
  2. 在您的登录端点网页上,选择使用 Google 继续
    **注意:**如果您被重定向到 Amazon Cognito 应用程序客户端的回调 URL,则表示您已经在浏览器中登录了 Google 账户。用户池令牌会显示在 Web 浏览器地址栏的 URL 中。
  3. 使用 Google 登录下,选择您的 Google 账户并登录。

成功进行身份验证后,您将被重定向到 Amazon Cognito 应用程序客户端的回调 URL。用户池发出的 JSON Web 令牌(JWT)将显示在 Web 浏览器地址栏的 URL 中。
**注意:**在现实世界的 Web 应用程序中,登录端点的 URL 由 JavaScript SDK 生成。这还会解析 URL 中的 JWT 令牌。

相关信息

通过第三方添加用户池登录

AWS 官方
AWS 官方已更新 10 个月前