很多问题。让我们一一分析并尝试澄清一些事情。
[在 Google Assistant 和我的系统之间] 实施 Google 帐户链接的正确方法是什么?
首先 - 您需要了解什么是帐户链接is.
它允许您提供一种授权用户访问您的服务的方法。 Google 使用它将 Google Assistant 帐户连接到您系统上的帐户。
由于这不利于您的系统,因此“正确的方法”取决于您的基础设施。但总的来说 - 这意味着您将颁发 OAuth 令牌供 Google 使用并交还给您的 webhook。预期的详细信息位于Google 文档上的操作 https://developers.google.com/actions/identity/.
需要明确的是——您需要成为 OAuth 服务器.
Google 帐户链接为通过 Dialogflow 注册/验证用户提供了什么?
Nothing.
嗯,基本上什么都没有。
如果尚未获得该用户的授权,它所做的就是将用户移交给您的 OAuth 授权端点。它希望您交回它将使用的令牌。
帐户链接是否会将标头中的不记名令牌返回给 Dialogflow,从而返回给我的处理程序?或者我必须解析originalRequest
JSON 对象...
身份验证令牌(您已颁发,因为您是 OAuth 服务器)将在 JSON 对象中发送originalRequest.data.user.accessToken
.
...获取用户信息然后针对身份提供商进行验证?
您负责验证访问令牌是您颁发的并且仍然有效,然后......用它做任何您想做的事情。然而,人们假设您将使用它来确定用户是谁。如何做到这一点(在表中查找、将其传递给另一个服务、从 JWT 中获取信息等)完全取决于您以及您如何实现 OAuth 服务以及令牌的格式。
如何从 Dialogflow 请求中获取用户信息?
这取决于您期望的“用户信息”。默认情况下,除非您提出要求,否则 Actions on Google 和 Dialogflow 不会向您提供任何信息 - 并且您不会通过帐户链接提出要求。您可以通过使用对 Google 权限系统的操作 https://developers.google.com/actions/identity/user-info#user_name_and_location。但即使是许可系统也不会为您提供您可能想要的信息(大多数人想要电子邮件地址 - 您无法请求)。
如果您想通过帐户链接来完成此操作 - 您需要在设置帐户时请求该信息。
我是否必须解析originalRequest JSON 对象才能获取用户信息?
如果您正在使用权限,那么是的。
如果您不是,那么虽然您可以解析 JSON 以获取发送的任何内容(匿名用户 ID),但它不会只为您提供来自其 Google Assistant 帐户的信息。
帐户关联并不是要访问他们的 Actions on Google 帐户,而是要在他们通过 Google 助理访问您的服务时访问您系统中的帐户。
验证 JWT 令牌后应填充 HttpContext
该文章讨论了使用 Firebase 身份验证作为 OAuth 服务器以及如何将其作为客户端进行处理。
谷歌的行动扭转了这一局面。You需要成为服务器。It是客户。
如果您愿意的话,当然可以构建一个使用 Firebase 身份验证对用户进行身份验证的服务器,并颁发 JWT 令牌作为您的不记名令牌,但这都不是要求。