Dialogflow、Google 帐户链接和 ASP.NET 核心 API(Webhook)

Dialogflow, Google Account Linking and ASP.NET Core API (Webhook)

我是一名学生,正在为我的高级设计项目 Google Home 开发 NLP 应用程序。我特别想知道:

  1. 实施Google帐户链接的正确方法是什么?Google帐户链接通过 Dialogflow 为 registering/authenticating 用户提供什么(即从初始查询到Google 登录,返回到 Dialogflow,然后到我的 ASP.NET 核心 API 处理程序)。
  2. 帐户链接 return header 中的不记名令牌是否返回到 Dialogflow,从而返回到我的处理程序?或者我是否必须解析 originalRequest JSON object 以获取用户信息然后根据身份提供者对其进行验证?
  3. 如何从我的 webhook(ASP.NET 核心 API)中的 Dialogflow 请求中获取用户信息?我是否必须解析 originalRequest JSON object 才能获取用户信息?根据我的理解,从这个很棒的 tutorial,应该在验证 JWT 令牌后填充 HttpContext。尚不清楚的是如何从 Dialogflow 和 Google 帐户链接中获取令牌。

感谢您为实现用户 authentication/authorization 从 Dialogflow 到我的 .NET webhook 提供的任何帮助或指导。

很多问题。让我们一一列举,并尝试弄清楚一些事情。

实施 Google 帐户链接 [在 Google 助手和我的系统之间] 的正确方法是什么?

首先 - 您需要了解什么是帐户链接

它可以让您提供一种方式来授权用户访问您的服务。 Google 使用它来将 Google 助理帐户连接到您系统上的帐户。

由于这是针对您的系统的,因此 "correct way" 取决于您的基础架构。但总的来说 - 这意味着您将为 Google 颁发 OAuth 令牌以供使用并返回给您的 webhook。预期的详细信息在 Actions on Google documentation.

明确一点 - 您需要成为 OAuth 服务器

Google 帐户链接通过 Dialogflow 为 registering/authenticating 用户提供什么?

没有。

嗯,基本上什么都没有。

它所做的只是将用户移交给您的 OAuth 授权端点(如果它还没有对该用户的授权)。它希望您交回它将使用的令牌。

帐户链接 return header 中的不记名令牌是否返回到 Dialogflow,从而返回到我的处理程序?或者我必须解析 originalRequest JSON object...

授权令牌(您已颁发,因为您是 OAuth 服务器)将在 JSON object 中发送至 originalRequest.data.user.accessToken

...获取用户信息然后根据身份提供者对其进行验证?

您有责任验证访问令牌是您颁发的并且仍然有效,然后...用它做任何您想做的事。然而,有人假设您将使用它来确定用户是谁。你如何做到这一点(在 table 中查找它,将它传递给另一个服务,从 JWT 中获取信息等)完全取决于你以及你如何实现 OAuth 服务以及格式是什么令牌是。

如何从 Dialogflow 请求中获取用户信息?

这取决于 "user information" 您的期望。默认情况下,Actions on Google 和 Dialogflow 不会向您提供任何信息,除非您提出要求——而且您不会通过帐户链接要求提供这些信息。您通过使用 Actions on Google permission system 请求它。但即使是权限系统也不会为您提供您可能需要的信息(大多数人想要电子邮件地址 - 您无法请求)。

如果您想通过帐户链接进行操作 - 您需要在设置他们的帐户时请求该信息。

我是否必须解析原始请求 JSON object 才能获取用户信息?

如果您正在使用权限,那么可以。

如果您不是,那么虽然您可以解析 JSON 以获取发送的任何内容(匿名用户 ID),但它不会仅向您提供来自他们的 Google 助手的信息帐号。

帐户链接不是要访问他们在 Google 帐户上的操作 - 它是关于在他们通过 Google 助手访问您的服务时访问您系统中的帐户。

验证 JWT 令牌后应填充 HttpContext

那篇文章讨论了将 Firebase 身份验证用作 OAuth 服务器以及如何将其作为客户端进行处理。

Google 的行动扭转了局面。 需要当服务员。 是客户端

当然可以构建一个使用 Firebase 身份验证对用户进行身份验证的服务器,如果这是您想要做的,并发布 JWT 令牌作为您的不记名令牌,但这些都不是要求。