gpt4 book ai didi

oauth-2.0 - Google Home授权码和使用Google帐户的身份验证

转载 作者:行者123 更新时间:2023-12-04 16:38:15 25 4
gpt4 key购买 nike

我目前正在尝试使用Google Home Action对Google帐户进行身份验证,并从凭据中检索授权代码。我这样做不是想要访问 token ,而是授权码

我查看了this post,发现Google更新了其策略,并且不再允许将其自己的OAuth端点用于帐户链接授权代码流:

When implementing account linking using OAuth, you must own your OAuth endpoint



话虽如此,
  • 用我的操作和必要的范围对现有的Google用户进行身份验证的正确方法是什么? (我需要日历访问权限)
  • 是否可以执行此身份验证而无需创建自己的OAuth2.0端点?
  • 从此流程中,是否可以提取授权码
  • 最佳答案

    当前通过用户的Google帐户进行身份验证的方法是使用Google Sign-In for Assistant。他们登录到您的操作后,您将获得一个ID token ,您可以对其进行解码以获取其Google ID,您可以使用该ID来在数据存储区中查找其帐户以获取其访问/刷新 token 。

    由于您需要其他范围,因此,如果用户登录到Assistant且尚未将其范围附加到其帐户,则可以将其重定向到基于Web的登录页面,在此页面上,他们可以使用带有以下功能的Google登录进行登录:您需要的范围。在这种情况下,当他们登录并授权通过Web的访问时,您将获得身份验证代码,您将需要使用该身份验证代码来交换身份验证 token 并刷新 token 并存储它们。

    您无需为此创建自己的OAuth端点,尽管您将需要做一些额外的工作来确保将它们重定向到您的网站以在必要时进行授权。

    当他们登录并授权您时,您将仅获得一次autht_rstrong身份验证码。您需要将其交换为auth和refresh token ,然后存储这些 token 。

    更新以更好地解释事情。

    查看该体系结构,我们看到它包含一些组件。在整个流程中,我们将详细介绍其中的每个细节:

    enter image description here

  • 您有某种类型的数据存储,您将在其中存储用户的Auth token 和Refresh token 。我假设您使用Google的用户ID作为此数据存储区的索引。
  • 在这种情况下,“Google用户ID”是指Google分配给每个帐户的唯一数字标识符。尽管它只有数字,但通常用字符串表示,因为它通常比大多数数字类型长得多。在ID token 中,这是“子”声明。
  • 从理论上讲,您可以使用ID token 中的声明中可用的其他标识符,例如其电子邮件地址。不幸的是,并非所有这些字段都保证可用-仅保证“sub”。
  • 您有一个Web服务器,其中有一些重要的URL用于我们的目的:
  • 实现操作的Webhook。
  • 登录/认证页面。
  • 登录页面上的javascript将向您发送身份验证代码的端点。
  • Google助手,它可能正在Google Home或移动设备上运行。我们还假设用户将能够访问浏览器来查看他们正在授权的内容。
  • 您将使用的Google服务,包括Google的OAuth服务

  • 让我们从用户先前登录并授权我们代表他们访问服务的情况开始。我们在数据存储区中拥有他们的Auth token 和Refresh token ,并根据其Google用户ID进行了索引。这是简单的情况,但是它可以帮助我们了解所有数据如何进入其中的更复杂的情况。

    数据流如下所示:

    enter image description here
  • 助手发送一个 Action Webhook意图和可能的参数。如果这是第一条消息,则表示欢迎,但这没关系。它包含一个身份 token ,我们将需要对其进行解码和验证。作为我们解码时获得的数据的一部分,其中包括用户的用户ID。
  • 使用用户ID…
  • ...我们从数据存储区获取Auth Token和Refresh Token。
  • 使用Auth Token和Refresh Token,我们可以代表用户对Google的服务采取一些措施。
  • 我们将从服务中获得一些结果……
  • ...我们通常希望以某种形式将其传递回用户。

  • 容易吧?但是,如果用户之前从未使用过助手与我们的操作进行交谈该怎么办?而且从未授权我们访问他们的Google服务,所以我们没有他们的 token 吗?该流程看起来像这样:

    enter image description here
  • 助手将向 Action Webhook发送一个Intent和可能的参数。这将是第一个消息,因此我们的欢迎意向被触发。没有身份 token 。
  • Webhook看到没有身份 token ,因此它发回一条消息,请求“登录”帮助程序功能。由于您的项目已配置为使用Google登录,因此助手会提示用户是否可以向您提供其个人资料信息。
  • 如果他们回答"is",您将收到另一个答复,称他们已经登录并包括身份 token ,我们将对其进行解码和验证并获取其用户ID。 (如果他们回答“否”,我们将收到回应,说它失败了。您如何处理这是另一回事。我假设他们回答"is"。)
  • 使用用户ID…
  • ...我们尝试从数据存储区获取Auth Token和Refresh Token。但是他们还没有授权我们。我们已经对它们进行了身份验证,但是没有授权...
  • ...因此我们回信说他们需要访问我们的网站以授权我们访问他们的Google服务。我们可能会要求他们切换到移动设备来执行此部分,甚至包括指向登录页面的链接。
  • 他们将在带有屏幕的设备上访问链接。
  • 我们将发回登录页面,其中包括指向“使用Google登录”的链接。我们已经配置了此按钮,以询问我们访问其服务所需的其他范围,以及在“离线”时代表他们访问服务的权限。
  • 他们将经历Google登录舞步和OAuth范围屏幕,并有望授予我们所需的所有权限。 (同样,如果他们不这样做,我会忽略发生的事情。)由于与我们无关,因此我省略了该舞蹈的外观。假设一切顺利,Google会为他们提供一个Auth代码,登录页面上的javascript发送给我们。
  • 我们称为Google的OAuth服务器以验证身份验证代码,并使用它来获取身份验证 token 和刷新 token …
  • …然后我们将其存储在数据存储中…
  • …然后发回一些东西,以便Javascript页面可以告诉用户他们从现在开始可以正常使用我们的Action。

  • 他们现在可以执行此操作,并且其行为与在较早的简单方案中相同。

    看起来很复杂,但事实证明,在某些情况下,我们可以删除一些步骤。如果Google Cloud Project是您用于“操作”以及基于网络的Google登录所用的同一项目,则一旦他们在网络上授权了该项目,则所有用于实现的调用都将包括“身份 token ”。这使我们可以删除上面的步骤2-6,因此事情看起来像这样:

    enter image description here
  • 助手将向 Action Webhook发送一个Intent和可能的参数。这将是第一个消息,因此我们的欢迎意向被触发。没有身份 token 。
  • Webhook看到没有身份 token ,因此我们发回一条消息,说他们需要访问我们的网站以授权我们访问其Google服务。我们可能会要求他们切换到移动设备来执行此部分,甚至包括指向登录页面的链接。 (这是上面的折叠的步骤2和6。)
  • 他们将在带有屏幕的设备上访问链接。
  • 我们将发回登录页面,其中包括指向“使用Google登录”的链接。我们已经配置了此按钮,以询问我们访问其服务所需的其他范围,以及在“离线”时代表他们访问服务的权限。
  • 他们将经历Google登录舞步和OAuth范围屏幕,并有望授予我们所需的所有权限。 (同样,如果他们不这样做,我会忽略发生的事情。)由于与我们无关,我忽略了这种舞蹈的外观。假设一切顺利,Google会为他们提供一个Auth代码,登录页面上的javascript发送给我们。
  • 我们称为Google的OAuth服务器以验证身份验证代码,并使用它来获取身份验证 token 和刷新 token …
  • …然后我们将其存储在数据存储中…
  • …然后发回一些东西,以便Javascript页面可以告诉用户他们从现在开始可以正常使用我们的Action。

  • 还值得注意的是,如果他们在尝试使用Assistant版本之前就已经访问了该网站(即-由于搜索结果或他们从第二张图的第8步或从第三张图的4开始),然后登录,首次通过助手访问我们时,将获得其身份 token ,这就像简单的场景一样有效。

    关于oauth-2.0 - Google Home授权码和使用Google帐户的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50931590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com