基于 OAuth 的 Google 登录“精简”链接概念指南

基于 OAuth 的 Google 登录“化繁为简”将 Google 登录功能添加到 基于 OAuth 的账号关联。如果您在 Action 中使用这种关联类型,则 该流程从 Google 登录开始,您可以通过 Google 登录 您的系统中已存在个人资料信息。如果不支持,则使用标准的 OAuth 流程 。通过提供这两种关联类型的组合,您的用户可以 在 Action 中使用 Google 账号或非 Google 账号。如果 也可以使用自己的 Google 个人资料创建一个新账号 信息。

如果存在以下任何一种情况,则建议使用“精简关联”作为账号关联解决方案 以下规则适用:

  • 你有一个跨多个平台(例如,如果你的 操作支持 Android 应用)。
  • 您已经有身份验证系统,并且您希望允许用户 将其身份与非 Google 账号相关联。例如,如果您提供 并且希望确保用户不会失去 积分。

要验证“精简关联”解决方案是否适合您,请参阅 选择账号关联类型页面。

关键词

在了解“精简关联”的工作原理之前,请先熟悉一下 并替换为以下字词:

  • Google ID 令牌:经过签名的用户身份断言,其中包含 用户的 Google 个人资料基本信息(用户的姓名、电子邮件地址和 个人资料照片)。Google ID 令牌是 JSON 网络令牌 (JWT)。以下是已解码令牌的示例:
{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • user.verificationStatus:由系统设置的属性,用于指示 当前会话包含经过验证的用户。

  • user.accountLinkingStatus:由系统设置的属性,用于指示 当前会话中的用户拥有关联的身份。

  • 账号关联系统场景:实现确认的预定义场景 账号关联流程,并且可以根据具体应用场景进行自定义。

  • 授权代码流程:您可以通过 简化了关联流程。此流程需要两个端点:

    • 授权端点:呈现登录界面的端点 尚未登录的用户它会记录已同意 以短期授权代码的形式请求访问权限。
    • 令牌交换端点:此端点负责两种类型 广告交易平台: <ph type="x-smartling-placeholder">
        </ph>
      1. 使用授权代码交换长期刷新令牌 和短期有效的访问令牌这种交换会在用户 系统会完成账号关联流程
      2. 使用长期刷新令牌交换短期访问 令牌。当 Google 需要新的访问令牌时,就会进行这种交换 因为它已过期。
  • 隐式代码流程:您可以通过 简化了关联流程。此流程只需要一个授权端点。 在此流程中,Google 会在用户的 。如果登录成功,您将向 Google。现在,此访问令牌包含在从 与你的 Action 搭配使用。

  • 访问令牌:授权您的服务访问 用户数据。访问令牌与每个用户相关联。

  • 刷新令牌:每次 短期有效的访问令牌已过期。

前提条件

若要使用“精简”关联类型,您需要满足以下条件:

  • OAuth 2.0 服务器
  • 令牌交换端点

    必须扩展令牌交换端点,以增加对 Google 的 用于通过 ID 令牌自动关联和创建账号的协议 (即,将 intent=getintent=create 参数添加到 此端点)。

工作原理

本部分介绍了精简关联的一般流程。 简化的关联流程部分介绍了 根据 a) 是启用还是停用 以及通过语音创建账号;b) 无论您是使用隐式方式还是 授权代码流程。

基本流程如下:

  1. 您的 Action 会请求用户同意访问其 Google 个人资料。
  2. 用户表示同意后,您的 Action 会收到一个 Google ID 令牌, 包含用户的 Google 个人资料信息。
  3. 您必须验证和解码令牌才能读取个人资料内容。
  4. 您的 Action 会使用此令牌来检查用户的 Google 个人资料 信息。
    1. 如果包含,则表示该用户已使用其 Google 账号,而 Google 助理会将用户的身份与其关联的 Google 账号。用户可以继续对话 已关联孩子的 Google 助理。
    2. 如果没有,请参阅第 5 步。
  5. 用户可以:a) 使用 Google 个人资料创建新账号 或者 b) 使用其他账号登录您的系统。通过 向用户显示的选项会有所不同 禁止通过语音创建账号。如果用户选择 系统,则标准 OAuth 流程随即开始。
  6. 用户创建新账号或使用其他提供方登录后, 您的服务会向 Google 返回一个访问令牌。(如果您使用的是 授权代码流程中,您的服务也会返回一个刷新令牌。)
  7. 用户现在可以通过 已关联账号。

简化了关联流程

本部分介绍了使用精简关联可执行的各种流程。 以下图表介绍了使用授权代码流程时的流程 而不是隐式代码流,并且假定您使用的是 Actions Builder。

每个流程在用户调用您的 Action 后都包含以下常见步骤:

在上面的流程中,您将过渡到账号关联系统场景, 自定义的理由。场景请求用户授予权限 Google 个人资料信息。在用户同意后,Google 助理会 包含 user@gmail.com 的个人资料信息的请求。

此时间点之后的流程因您是否配置了账号而异 以及用户的信息是否已存在于 Google Cloud 中 系统。以下各部分分别介绍了这些流。

启用了语音账号创建功能的流程

本部分详细介绍了启用账号后可能发生的账号关联流程 通过语音创建账号。

流程 1:用户信息存在于您的系统中

在这种情况下,由 user@gmail.com 表示的用户存在于您的后端, 这样您的令牌交换端点就会为用户返回一个令牌。用户的 您的 Action 中所用的身份现在已与其 Google 账号相关联。用户的 原始请求(“Order my normal”)与用户 intent order_drink. 匹配 然后,webhook 会处理匹配 intent 的执行,并查询 数据库中的user@gmail.com正常顺序。然后,用户可以 与 Google 助理对话

流程 2:用户信息不存在,且用户创建了账号

因为您已通过语音启用了账号创建功能,但user@gmail.com却没有这么做 Google 助理会询问用户是否需要 以下任意一项:

a) 使用您的 Google 个人资料信息在您的系统上创建一个新账号; 这通过语音完成

b) 使用其他账号登录您的系统

在这种情况下,用户选择通过语音创建新账号。Google 通话 向您的服务的令牌交换端点发送创建账号的请求。 此请求包含 Google ID 令牌,该令牌包括所需的组件 以创建新账号。然后,您可以使用此令牌中的信息 (用户的姓名和电子邮件地址)为用户创建账号。

创建账号后,您的服务会返回一个访问令牌并刷新 令牌。用户在您的 Action 中的身份现在为 与其 Google 账号关联。用户的原始请求(“按常规方式订购”) 匹配用户意图order_drink.您的网络钩子随后会处理 所匹配意图的执行方式,并向您的数据库查询 user@gmail.com 的常规顺序,由于用户是新用户,因此该顺序尚不存在。 然后,您的 Action 可以询问用户想要点什么。

流程 3:用户信息不存在,且用户使用其他账号登录

你启用了通过语音创建账号的功能,因此 Google 助理会询问用户 执行以下任一操作:

a) 使用您的 Google 个人资料信息在您的系统上创建一个新账号; 这通过语音完成

b) 使用其他账号登录您的系统

在这种情况下,用户选择使用其他账号登录 启动标准 OAuth 流程。如果该流程是从纯语音设备开始的, Google 将执行传递给手机。然后,Google 会打开 您的授权端点,以及根据您的 配置,用户可以选择是否 a) 使用 不使用 Google 登录功能的现有账号;或 b) 创建一个新账号 使用另一家提供商。有关 OAuth 流程的详情,请参阅 OAuth 关联概念指南

验证用户的凭据后,您的服务会返回一个访问令牌 并向 Google 提供刷新令牌您的 Action 中的用户身份现已关联 非 Google 账号。用户的原始请求(“按常规方式订购”)匹配 用户 intent order_drink.。然后,webhook 会处理 匹配 intent 并向数据库查询 user@gmail.com 的正常顺序, 尚不存在,因为用户是新用户。然后,您的 Action 可以请求 告诉他们要点什么,或者请他们安排正常点餐时间。

停用了语音账号创建功能的流程

本部分详细介绍了停用后可能发生的账号关联流程 通过语音创建账号。

流程 4:用户信息不存在

您没有启用通过语音创建账号的功能,并且您的 因此标准 OAuth 流程随即开始。Google 助理会打开你的 用户浏览器中的授权端点(如果该流程开始于纯语音) 设备,Google 会将执行传递给带有屏幕的设备)。用户可以 选择:a) 使用其他提供商登录(如果他们已注册 或 b) 创建一个新账号 其他提供商。有关 OAuth 流程的详情,请参阅 OAuth 关联概念指南

验证用户的凭据后,您的服务会返回一个访问令牌 并向 Google 提供刷新令牌您的 Action 中的用户身份现已关联 非 Google 账号。用户的原始请求(“按常规方式订购”)匹配 用户 intent order_drink.。然后,webhook 会处理 匹配 intent 并向数据库查询 user@gmail.com 的正常顺序, 尚不存在,因为用户是新用户。然后,您的 Action 可以请求 设置其正常顺序。