如何使用Google上的操作仅使用Google帐户对用户进行身份验证?

Dav*_*der 20 google-oauth google-oauth2 actions-on-google

目前,Google Assitant提供了一种简单的方法来请求有关用户的不可识别信息,以及通过OAuth2对第三方服务上的用户进行身份验证的详细流程.如果我需要的是让用户在Google上进行身份验证呢?我尝试使用Google OAuth2信息填写帐户关联流程,但这似乎不起作用.如果最后一件事应该流畅地工作,那就足够了答案.

上下文:用户仅在相关网页上使用Google进行身份验证.我只需要将此已经过身份验证的帐户与Google智能助理中经过较少身份验证的帐户相关联.

Pri*_*ner 41

更新,2018年10月25日:

截至2018年9月13日,如果您的项目使用Google登录,现在可以更简单地访问用户的帐户.Google登录for Assistant会在您的许可下向您提供ID令牌,其中包含有关用户的信息,包括其Google ID.此权限可以仅使用语音授予,并且相当简化.

如果您需要访问Google的API,则可以将其与基于Web或应用程序的Google登录相结合,以获得访问OAuth范围的权限.

2017年10月25日更新:

截至10月4日或10月7日,Google已再次更新其政策,以恢复限制有效的OAuth端点的语言.现在的条款包括

使用OAuth实施帐户关联时,您必须拥有OAuth端点

并且(从下面的评论中)看来他们现在检查Google端点以防止此方法起作用.

此时,您唯一能做的就是设置自己的OAuth2服务器.

原帖:

从广义上讲,您需要执行的身份验证任务分为四个部分:

  1. 配置项目(在云控制台中),以便启用Calendar API并正确配置OAuth2客户端.
  2. 在操作控制台中为帐户链接配置操作.
  3. 为您的API.AI代理配置Google Integration上的操作,以指示需要登录.
  4. 当API.AI调用您的webhook来实现Intent时,它将包含一个身份验证令牌作为JSON的一部分.您可以使用此令牌拨打所需的Google API.

配置云项目

您需要配置您的云项目,以便它可以访问您需要的Google API并设置OAuth2客户端ID,密钥和重定向URI.

  1. 转到https://console.cloud.google.com/apis/dashboard,确保您选择了正在使用的项目.然后确保您已启用所需的API.

  2. 选择左侧的"凭据"菜单.你应该看到这样的东西:

凭据屏幕

  1. 选择"创建凭据",然后选择"OAuth客户端ID" 创建凭据

  2. 选择这是用于"Web应用程序"(它......有点......)

  3. 输入名称.在下面的屏幕截图中,我使用了"Action客户端",所以我记得这实际上是针对Google上的操作.

  4. 在"授权重定向URI"部分中,您需要https://oauth-redirect.googleusercontent.com/r/your-project-id在云控制台中包含替换"your-project-id"部分的表单的URI 和...您的项目ID.此时,屏幕应如下所示:在此输入图像描述

  5. 单击"创建"按钮,您将看到一个包含您的客户端ID和密码的屏幕.您现在可以获得这些副本,但您也可以稍后获取它们.在此输入图像描述

  6. 单击"确定",您将返回"凭据"屏幕,并添加新的客户端ID.如果您需要再次获取ID和密码,则可以单击铅笔图标(如果已被泄露,则可以重置密码).

在此输入图像描述

配置操作控制台

一旦我们为项目设置了OAuth,我们就需要告诉Actions这是我们将用于验证和授权用户的内容.

  1. 转到https://console.actions.google.com/并选择您要使用的项目.

  2. 在概述中,完成所有必要的配置,直到您可以进入步骤4"帐户链接".这可能需要您设置名称和图标 - 如果需要,您可以稍后返回以更正这些名称和图标.

在此输入图像描述

  1. 选择授权类型"授权代码",然后单击"下一步".

在此输入图像描述

  1. 在"客户端信息"部分中,输入在云控制台中创建凭据时的客户端ID和客户端密钥.(如果您忘记了,请转到Cloud Console API凭据部分,然后单击铅笔.)

  2. 对于授权URL,请输入 https://accounts.google.com/o/oauth2/v2/auth

  3. 对于令牌URL,请输入 https://www.googleapis.com/oauth2/v4/token

  4. 点击下一步

在此输入图像描述

  1. 您现在可以为您请求的范围配置客户端.与您输入范围的大多数其他地方不同 - 您需要每行一个.然后单击下一步.

在此输入图像描述

  1. 您需要输入测试说明.在您提交操作之前,这些说明应包含测试帐户和密码,审核小组可以使用该帐户和密码对其进行评估.但是你可以在测试时把东西放在那里然后点击Save按钮.

配置API.AI

在API.AI中,您需要指示用户需要登录才能使用Action.

  1. 转到https://console.api.ai/并选择您正在使用的项目.

  2. 选择"集成",然后选择"Google上的操作".如果你还没有打开它.

  3. 单击"登录欢迎意图所需"复选框.

在此输入图像描述

处理webhook中的内容

完成所有设置后,处理webhook中的内容非常简单!您可以通过以下两种方式之一获取OAuth访问令牌:

  • 如果您正在使用JavaScript库,请致电 app.getUser().authToken

  • 如果您正在查看JSON正文,那么它就在 originalRequest.data.user.accessToken

您将使用此访问令牌使用其他地方定义的方法对Google的API端点进行调用.

您不需要刷新令牌 - 除非用户已撤销访问权限,否则助理应向您提供有效的访问令牌.

  • 显然他们在10月4日或7日重新更新了政策,以禁止再次这样做.有一段时间他们的政策允许,但他们没有检查,但https://developers.google.com/actions/policies/general-policies#account_linking上的政策现在声明"使用OAuth实施帐户关联时,你必须拥有你的OAuth端点" (5认同)
  • 我正在使用类似的方法,但使用隐式授权,并发现在使用浏览器/操作控制台进行测试时,以及使用适用于Android的Google Home应用程序时效果很好.不幸的是,在应用程序的iphone版本中,用户auth大部分时间都会挂起.来自谷歌支持的操作的反馈是,问题是谷歌登录流程是在单独的浏览器选项卡(窗口)中实现的.在iPhone上你无法在SfariViewController中打开2个窗口,因此它们重写了第一页的地址,无法完成登录流程.这是已知问题,他们不打算改变这一点. (2认同)
  • 这显然违反了以前的策略,该策略明确声明您需要控制端点并且控制台强制执行该策略,但该规则(及其技术实施)已从策略中删除.我在团队中有Google员工(包括审核小组)告诉我,如果您使用Google登录,则允许这样做,其他人告诉我它仍然违反了该政策.一旦得到简单的回复,我会更新答案. (2认同)

Dav*_*der 4

联系 Google 后,目前的情况似乎是您应该设置自己的 OAuth2 服务器,然后在 OAuth2 服务器的登录屏幕上启动 Google OAuth2 流程。

您必须拥有自己的 Google Oauth2 端点 - 您不能使用 Google Oauth 本身作为提供商,这是正确的。要使用 Google OAuth 服务,您可以在自己的端点中使用“使用 Google 登录”按钮。

来源:在 Google 支持上联系 Google Actions

现在有点无语……因为这似乎是谷歌方面的一个巨大疏忽。