目前,Google Assitant提供了一种简便方法to request non-identifiable information about the user以及通过OAuth2对第三方服务上的用户进行身份验证的详细流程。如果我需要的是让用户在Google上进行身份验证呢?我尝试使用Google OAuth2信息填写帐户关联流程,但这似乎不起作用。如果最后一件事应该流利地工作,那就足够了答案。
上下文:用户仅在相关网页上使用Google进行身份验证。我只需要将此已经过身份验证的帐户与Google智能助理上经过较少身份验证的帐户相关联。
答案 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服务器。
原帖:
从广义上讲,您需要执行的身份验证任务分为四个部分:
配置云计划
您需要配置您的云项目,以便它可以访问您需要的Google API并设置OAuth2客户端ID,密码和重定向URI。
转到https://console.cloud.google.com/apis/dashboard并确保您拥有所选项目。然后确保您已启用所需的API。
选择"凭据"菜单在左边。你应该看到这样的东西:
选择这是针对" Web应用程序" (它......有点......)
输入名称。在下面的屏幕截图中,我使用了" Action客户端"所以我记得这实际上是针对谷歌的行动。
在"授权重定向URI"部分,您需要包含https://oauth-redirect.googleusercontent.com/r/your-project-id
形式的URI替换" your-project-id"部分包含...您在Cloud Console中的项目ID。此时,屏幕应如下所示:
点击"创建"按钮,您将获得一个包含您的客户端ID和密码的屏幕。您现在可以获得这些副本,但您也可以稍后获取它们。
点击"确定"并且你将被带回"证书"添加了新客户端ID的屏幕。如果您需要再次获取ID和密码,可以单击铅笔图标(如果已经泄露,则重置密码)。
配置操作控制台
一旦我们为项目设置了OAuth,我们就需要告诉Actions这是我们用来验证和授权用户的。
转到https://console.actions.google.com/并选择您正在使用的项目。
在概述中,完成所有必要的配置,直到您可以进入步骤4,"帐户关联"。这可能需要您设置名称和图标 - 如果需要,您可以稍后再更正。
在“客户端信息”部分中,输入在云控制台中创建凭据时的客户端ID和客户端密钥。 (如果您忘记了,请转到Cloud Console API凭据部分,然后单击铅笔。)
对于授权网址,请输入https://accounts.google.com/o/oauth2/v2/auth
对于令牌网址,请输入https://www.googleapis.com/oauth2/v4/token
单击“下一步”
配置API.AI
在API.AI中,您需要指明用户需要登录才能使用Action。
转到https://console.api.ai/并选择您正在使用的项目。
选择"集成"然后"谷歌的行动"。如果您还没有打开它,请将其打开。
点击"登录欢迎意图和#34;复选框。
处理您的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智能助理集成。 然后按照下面提到的步骤进行谷歌操作中的帐户关联: -
转到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中 - >保存更改
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.profile和https://www.googleapis.com/auth/userinfo.email 我们很高兴。 7.保存更改。
在托管服务器日志中,我们可以看到访问令牌值,通过访问令牌,我们可以获取有关电子邮件地址的详细信息。
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协议。让我更清楚一点:
这就是为什么你需要实现自己的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.