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

时间:2017-05-31 15:34:21

标签: google-oauth google-oauth2 actions-on-google

目前,Google Assitant提供了一种简便方法to request non-identifiable information about the user以及通过OAuth2对第三方服务上的用户进行身份验证的详细流程。如果我需要的是让用户在Google上进行身份验证呢?我尝试使用Google OAuth2信息填写帐户关联流程,但这似乎不起作用。如果最后一件事应该流利地工作,那就足够了答案。

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

4 个答案:

答案 0 :(得分:41)

更新,2018年10月25日:

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

如果您需要访问Google的API,您可以combine this with a web- or app-based Google Sign-In获得访问OAuth范围的权限。

更新,2017年10月25日:

截至10月4日或10月7日,Google已更新their policy(再次)以恢复限制有效的OAuth端点的语言。这些术语现在包括

  

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

并且(从下面的评论中)显示他们现在检查Google端点以阻止此方法工作。

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

原帖:

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

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

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

    1. 转到https://console.cloud.google.com/apis/dashboard并确保您拥有所选项目。然后确保您已启用所需的API。

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

    3. Credentials screen

      1. 选择"创建凭据"然后" OAuth客户ID" Create credentials

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

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

      4. 在"授权重定向URI"部分,您需要包含https://oauth-redirect.googleusercontent.com/r/your-project-id形式的URI替换" your-project-id"部分包含...您在Cloud Console中的项目ID。此时,屏幕应如下所示:enter image description here

      5. 点击"创建"按钮,您将获得一个包含您的客户端ID和密码的屏幕。您现在可以获得这些副本,但您也可以稍后获取它们。 enter image description here

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

      7. enter image description here

        配置操作控制台

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

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

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

        3. enter image description here

          1. 选择授权类型"授权码"然后单击“下一步”。
          2. enter image description here

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

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

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

            4. 单击“下一步”

            5. enter image description here

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

                1. 您需要输入测试说明。在您提交操作之前,这些说明应包含测试帐户和密码,审核小组可以使用该帐户和密码对其进行评估。但是,您可以在测试时将某些内容放在那里,然后点击“保存”按钮。
                2. 配置API.AI

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

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

                  2. 选择"集成"然后"谷歌的行动"。如果您还没有打开它,请将其打开。

                  3. 点击"登录欢迎意图和#34;复选框。

                  4. enter image description here

                    处理您的webhook中的内容

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

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

                    • 如果您正在查看JSON正文,则它位于originalRequest.data.user.accessToken

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

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

答案 1 :(得分:4)

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

  

您必须拥有自己的Google Oauth2端点 - 您无法将Google Oauth本身用作提供商,这是正确的。要使用Google OAuth服务,您可以使用"登录Google"而是在您自己的终端中按钮。

     

来源:在Google支持小组上联系Google操作

现在有点说不出话来......因为这似乎是对谷歌的一个巨大的监督。

答案 2 :(得分:2)

很长一段时间后我能够让它发挥作用。 我们必须首先启用webhook,然后我们可以看到如何在对话框流程实现文档中启用webhook 如果我们要使用Google智能助理,那么我们必须首先在集成中启用Google智能助理集成。 然后按照下面提到的步骤进行谷歌操作中的帐户关联: -

  1. 转到Google云端控制台 - > API和服务 - >凭证 - > OAuth 2.0客户端ID - >网络客户端 - >从那里注意客户端ID,客户端密钥                                      - >下载JSON - 从json记下项目id,auth_uri,token_uri                                      - >授权重定向URI - >白名单我们的应用程序的URL - >在此URL中,固定部分为https://oauth-redirect.googleusercontent.com/r/,并将项目ID附加到URL中                                      - >保存更改

  2. Google上的操作 - >帐户关联设置                     1.授权类型=授权代码                     2.客户信息                                 1.填写客户端ID,客户端secrtet,auth_uri,token_uri                                 2.输入auth uri为https://www.googleapis.com/auth,token_uri为https://www.googleapis.com/token                                 3.保存并运行                                 4.在谷歌助手上运行时会显示错误,但不要担心                                 5.返回助手设置中的帐户关联部分,输入auth_uri作为https://accounts.google.com/o/oauth2/auth                                 和token_uri为https://accounts.google.com/o/oauth2/token                                 6.将范围设为https://www.googleapis.com/auth/userinfo.profilehttps://www.googleapis.com/auth/userinfo.email                                 我们很高兴。                                 7.保存更改。

  3. 在托管服务器日志中,我们可以看到访问令牌值,通过访问令牌,我们可以获取有关电子邮件地址的详细信息。

  4. 将访问令牌附加到此链接“https://www.googleapis.com/oauth2/v1/userinfo?access_token=”,我们可以在生成的json页面中获取所需的详细信息。
  5. accessToken = req.get("originalRequest").get("data").get("user").get("accessToken")
    r = requests.get(link) print("Email Id= " + r.json()["email"]) print("Name= " + r.json()["name"])

答案 3 :(得分:1)

您需要使用您正在开发的任何Google智能助理应用实施Oauth协议。让我更清楚一点:

  1. 用户在助理上,您需要将他链接到任何数据 你有你的应用程序
  2. 访问您拥有的数据 您的用户受访问令牌保护
  3. Google需要 要求您提供此令牌以访问此资源
  4. 当 谷歌有它可以发送到应用程序的令牌,所以它验证每一个 请求获取资源。
  5. 这就是为什么你需要实现自己的oauth服务器(老实说,它只是你的应用程序中的两个端点):在谷歌一侧检查身份,但只能知道用户和要访问的资源之间的链接由你。 上面的过程是有效的,您只需要指定自己的令牌端点和您自己的auth端点。 请注意,如果您只想检查用户是否已登录Google并获取其电子邮件,则只需实施不需要/ auth端点的简化身份流(Automatically Sign Up Users with Streamlined Identity Flows

    那个说我实现了流程但得到了同样的错误: expected_inputs[0].possible_intents[0]: Transactions/Identity API must be enabled before using.