OAuth 和 Google 登录概念指南 (Dialogflow)

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

如果符合以下任一情况,则建议使用 OAuth 和 Google 登录作为账号关联解决方案 以下规则适用:

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

如需验证 OAuth 和 Google 登录机制是否适合您,请参阅 选择账号关联类型页面。

关键词

在了解 OAuth 和 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"
}
  • 账号登录帮助程序 intent:您调用以请求的帮助程序 intent 账号关联流程。如需了解详情,请参阅 账号登录
    • 上下文字符串:您添加到账号中的自定义字符串 告知用户您想要关联的原因的登录帮助程序 intent 其账号。
  • 授权代码流程:您可以通过 OAuth + Google 登录。此流程需要两个端点: <ph type="x-smartling-placeholder">
      </ph>
    • 授权端点:呈现登录界面的端点 尚未登录的用户它会记录已同意 以短期授权代码的形式请求访问权限。
    • 令牌交换端点:此端点负责两种类型 广告交易平台: <ph type="x-smartling-placeholder">
        </ph>
      1. 使用授权代码交换长期刷新令牌 和短期有效的访问令牌这种交换会在用户 系统会完成账号关联流程
      2. 使用长期刷新令牌交换短期访问 令牌。当 Google 需要新的访问令牌时,就会进行这种交换 因为它已过期。
  • 隐式代码流程:您可以通过 OAuth + Google 登录。此流程只需要一个授权端点。 在此流程中,Google 会在用户的 。如果登录成功,您将向 Google。现在,从 与你的 Action 搭配使用。
  • 访问令牌:授权您的服务访问 用户数据。访问令牌与每个用户相关联。
  • 刷新令牌:每次 短期有效的访问令牌已过期。

前提条件

若要使用 OAuth 和 Google 登录关联类型,您需要满足以下条件:

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

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

工作原理

本部分介绍了 OAuth 和 Google 登录的一般流程。 下一部分(OAuth 和 GSI 流程)介绍了 根据 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. 用户现在可以通过 已关联账号。

OAuth 和 GSI 流程

本部分介绍了使用 OAuth 和 GSI 时可以执行的各种流程。 以下图表介绍了使用授权代码流程时的流程 而不是隐式代码流,并且假设您使用 Dialogflow 作为 您的 Action 的自然语言理解解决方案。

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

在上述流程中,您使用actions.intent.SIGN_IN 上下文字符串。此 intent 会要求用户提供访问权限 Google 个人资料信息。在用户同意后,Google 助理会 包含 user@gmail.com 的个人资料信息的请求。

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

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

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

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

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

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

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

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

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

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

创建账号后,您的服务会返回一个访问令牌并刷新 令牌。用户在您的 Action 中的身份现在为 与其 Google 账号关联。用户的原始请求(“按常规方式订购”) 匹配自定义 intentorder_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 可以请求 设置其正常顺序。