实施帐户关联 - 查询

时间:2017-11-08 16:44:12

标签: google-oauth google-authentication dialogflow actions-on-google

我已经向Google Dev Advocate寻求帮助,因为我正在努力在我的Google操作应用上实施帐户关联,他向我发送了一篇文档链接,该文章已经阅读并建议我也咨询堆栈溢出。我已经完成了第二个建议,并努力找到我的问题的确切答案,我已经在这里链接到doc文章,添加我的所有查询并将其发送回Dev Advocate以期获得更多的澄清,特别是提醒一下,关于该主题的完整新手可以阅读文档,并且不应该给予任何理由。

这是我所指的文章https://developers.google.com/actions/identity/account-linking

我的查询如下:

  1. 隐式代码流和授权代码流之间有什么区别。在文章"授权代码"被选中,为什么?
  2. 虽然我发现on Stackoverflow在哪里可以获取您的客户ID和密码,但您认为在文章中添加链接会不会很好?
  3. 授权网址 - 这是我没有找到明确的指南。可以使用一些Stackoverflow tickets报告2个Google OAUth网址(对于授权网址,请输入https://accounts.google.com/o/oauth2/v2/auth 对于令牌网址,请输入https://www.googleapis.com/oauth2/v4/token),但a recent change to google policy建议
  4.   

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

    所以我现在对于应该放在Aiuthorization网址和令牌网址中的内容非常困惑 - 为什么不能以更基本和清晰的方式记录这些内容?我还读过它需要通过HTTPS提供服务,如果您正在本地和宠物项目上工作,这不是商业性的,您将无法支付HTTPS费用?

    1. 什么是无缝帐户链接?为什么没有这个解释和记录?
    2.   

      如果您的应用支持无缝帐户关联

      1. 我们应该将此列入白名单?
      2.   

        将以下重定向URI列入白名单:https://oauth-redirect.googleusercontent.com/r/

        1. 您的OAuth 2.0客户端配置详细信息是什么?他们在哪里可以找到?
        2.   

          在展开的OAuth 2.0表单中,使用您的OAuth 2.0客户端配置填写字段。填写范围时,请确保它们以空格分隔。

          1. 我在Oneplus 3T Google App上看不到Discovery选项卡,我还能在哪里找到它?
          2.   

            打开Goog​​le应用并转到“发现”标签。

            1. 这就是我被困的地方 - 就像Stackoverflow上的其他人一样,我得到了#34;该帐户尚未关联"错误。也许解决上述问题会解决帐户关联错误?
            2.   

              调用您的应用。由于它是第一次使用您的Google帐户调用该应用,因此助理会通知您必须关联您的帐户。

              除了这些问题,我还有以下内容:

              1. 我希望能够访问用户日历和用户基本信息,以便我添加个人资料,电子邮件和https://www.googleapis.com/auth/calendar您能否确认这些是正确的?
              2. 谢谢,请记住文档应该适合所有人!

1 个答案:

答案 0 :(得分:26)

所有开发人员的文档 。但是,请记住,作为开发人员,某些任务可能需要来学习比您目前所知更多的知识。来到SO是实现这一目标的方法之一,但还有许多其他途径可以补充这一点。

然而,良好的原始文档确实有帮助。谷歌的文档目前还不错 - 它们过去很糟糕。

更新 - 在我们开始之前,让我回答您建议的问题,但实际上并没有问。

  

为什么我需要OAuth服务器?

首先 - 你不要。

将您的服务视为网站,将智能视为浏览器。对于许多网站,他们不需要知道用户是谁才能使用该网站。如果没有用户帐户,网站可以做很多事情。

在某些情况下,了解访问您网站的用户之前曾访问过您,这一点非常有用。通常,您会使用Cookie来跟踪此类用户。

助手与此相当,但略有不同。智能助理会向您发送匿名用户ID以及每条消息。此UserID仅适用于此用户和您的操作 - 它不会重复用于任何其他操作或任何其他用户。因此,如果您跟踪它,您将知道用户何时返回。与cookie一样,用户可以重置或清除它,但在大多数情况下,这是持久的。

但有时,您可能需要一个人登录您网站上的帐户。这就是OAuth服务器要实现的目标 - 为用户提供登录Action的方法。 OAuth是让人们最近登录服务的一种非常标准的方式,尽管其目的是授权客户代表您行事。

后者实际上是OAuth在这种情况下所做的事情 - 您的用户授权助理在与您的行动交谈时代表用户行事。

更新 - 现在有办法避免在某些情况下完全设置OAuth服务器。请参阅此答案底部的更新。)

现在回到您的问题

但是......让我们回答你的问题。

  

隐式代码流和授权代码流之间有什么区别。

这两个术语是由OAuth2标准更精心定义的,但简而言之 - 它们都让客户(来自您的远程服务器 - 本例中的助手)让用户授予您某些权利服务器。

隐式流程更简单,无论是您需要设置什么以及两台服务器交换的内容,还是假设一旦您发出令牌,它就无限期有效。这带来了一个稍高的风险,有人可以获得此令牌并使用它来模拟助理。

Auth Code流程更复杂(尽管不是很多),并以多种方式解决风险。一种方法是某些事务是服务器到服务器完成的,而不是包括客户端,并且这些事务包括共享密钥。另一种方法是,身份验证令牌的生命周期有限,因此曝光窗口有限,但有一个刷新令牌可用于获取新的身份验证令牌。

  

在文章"授权代码"选择了,为什么?

最有可能的原因是它对于最低水平的额外工作更安全。然而,它解决的大多数安全问题在更加开放的环境中最为明显,例如浏览器和移动设备 - 它们在助理方面的风险并不大。但是,对于需要设置auth服务器的地方,使用更安全的路由在其他方面也有好处。

大多数Google API使用Auth Code流程或其变体。 (虽然大多数使用它来自客户端 - 而不是服务器端。这是行动的帐户链接所需要的。)

  

虽然我在Stackoverflow上找到了获取客户ID和密码的地方,但您认为在文章中添加链接会不会很好?

嗯......除了that SO answer不再有效。 (并且,显然,从来没有打算有效。)正如您在下一个问题中提到的那样,Google已经明确了他们的政策,要求您拥有用于操作的OAuth端点。此外,他们还进行了技术更改,阻止您使用Google的终端。 (而且我已经更新了答案,这样说。)

同时配置云项目"部分内容正确,并说明了如何设置与Calendar API一起使用的凭据,您无法使用Google的OAuth端点为您自己的项目执行身份验证。

  

因此,我现在对应该在授权网址和令牌网址中放置的内容感到非常困惑 - 为什么不能以更基本,更清晰的方式记录这些内容?

因为这是他们在文档中做出非常明确的假设的一点。建议他们说" Step 1. Configure your server"你有一个OAuth服务器。如果您已经有OAuth服务器,那么您应该知道您的服务器的授权和令牌URL是什么。

但是,如果您不这样做,可以进一步说明他们在为您创建的OAuth服务谈论determining what the endpoints will be的位置。

  

我也读过它需要通过HTTPS提供服务,如果您正在本地和宠物项目上工作,这不是商业性的,那么您将无法做到支付HTTPS费用?

是的,它必须是HTTPS。这是OAuth的要求,也是您发送可用于执行用户授权的令牌的良好做法。听起来您希望能够向Google服务器发出API调用,如果这些令牌被拿走(或者可能用于访问相同资源的令牌),那么您的Google帐户可能会遭到入侵。

您可以在这里进行本地或宠物项目开发。仅举几例:

  • 您可以使用Firebase功能。对于宠物的项目"等级,他们是自由的。 (如果你的行动有点受欢迎,Google智能助理会为你提供应该支付适度使用水平的积分。)

  • 您可以使用Let's Encrypt免费获取服务器的SSL证书。

  • 由于您的服务器必须具有公共地址,因此您可以使用ngrok创建隧道,该隧道还提供您可以使用的公共HTTPS地址。一旦您的项目退出"个人测试"这可能不是一件好事。阶段,但是开始时是一个很好的工具。

当然,还有其他一些方法,但这些是您可以根据需要使用的一些好工具。

  

什么是无缝帐户链接以及为什么没有解释和记录?

是的。除了在文档中,他们通过调用它来混淆事物"简化身份流"。

Account Linking Overview page上显示"有关详细信息,请参阅Streamlined Identity Flows,了解如何配置OAuth服务器以支持Google智能助理的无缝身份体验。"

这将带您进入一个页面,讨论如何在其他两个身份流之上构建此流,并有一些额外的要求,但应该让用户的体验更好。

然而......不要为此烦恼。如果您只是为了好玩而这样做,那么正常的身份流并不是那么大的负担。如果您正在为商业产品执行此操作 - 请先使用正常流程。

  

我们应该将这个列入白名单?   将以下重定向URI列入白名单:https://oauth-redirect.googleusercontent.com/r/

这是OAuth的基本概念之一 - 作为客户端服务器与服务器之间通信的一部分,当您完成对用户的身份验证并获得他们的许可时,它会说重定向到特定的URL发出令牌。

OAuth规范要求您将该重定向网址与已为该客户端设置的网址进行比较。它没有指定你如何设置它。所以谷歌说'#34;当你为我们的客户设置OAuth服务器时 - 这是我们要求你重定向到的网址。"

Google无法解答将此列入白名单的位置,除非您的OAuth服务器"。大多数OAuth服务器都有一种配置多个客户端的方法,这是您为该客户端设置的值之一。 (ClientID和ClientSecret是其他值,但Google允许您确定这些值并将其作为操作控制台中帐户链接配置的一部分。这是您的下一个问题。)

  

您的OAuth 2.0客户端配置详细信息是什么?他们在哪里可以找到?

同样,这取决于您的 OAuth服务器以及您的要求想要在用户尝试登录时提示用户服务器。 ClientID和ClientSecret是两个这样的参数。 “助理”应请求访问的OAuth范围是其他参数。但这取决于您 - 因为它是您尝试访问的服务器。

  

我在Oneplus 3T Google App上没有看到Discovery选项卡,我还能在哪里找到它?

该文档看起来不正确。我认为应该说你应该在移动设备上打开 Google Home 应用。

它也可能意味着Google应用,在这种情况下,您的手机可能不支持Google智能助理作为Google应用的一部分。如有必要,您可以download the Google Assistant separately

但是 - 最初使用模拟器进行测试。虽然它需要一些手动步骤,但它们很容易遵循并帮助您追踪事物。

  

这就是我陷入困境的地方 - 就像Stackoverflow上的其他人一样,我得到了#34;该帐户尚未关联"错误。也许解决上述问题会解决帐户关联错误吗?

嗯,您的帐户尚未关联。 {:

听起来你还没有为你的Action设置一个auth服务器。在你让auth服务器工作之前,其余的都没有工作。

  

我希望能够访问用户日历和用户基本信息,以便我添加个人资料,电子邮件和https://www.googleapis.com/auth/calendar您是否可以确认这些是正确的?

首先,请注意,整个过程是将用户的智能助理帐户与您服务中的帐户相关联。您可能在其帐户(在您的服务中)中拥有用于执行操作的信息,例如访问Google资源或访问您了解其中的其他信息。

直接导致您访问他们用来与智能助理对话的Google帐户。

要获得用户在Google服务器上访问其资源的权限,您需要让他们授权您的服务器访问该服务器的权限。这是使用OAuth再次完成的,但这次是客户端。用户需要转到您的服务器,然后将它们重定向到Google的服务器以授权您,并且他们将被重定向回您的服务器,并使用您需要的代码商店。这些都是在智能助理及其账户链接系统之外完成的。

那就是说,对于你想要的,profileemail是相当正常的请求范围。 Calendar API Documentation确认https://www.googleapis.com/auth/calendar范围是您访问该API所需的范围。 (请注意,此网址不是您在浏览器中使用的网址,也不是您要访问的网址 - 只是唯一标识的名称。)

更新以反映API更改。由于此答案最初编写,因此Google引入了Google Sign In for Assistant,当您愿意将操作绑定到他们在智能助理上使用的相同Google帐户时,您可以避免设置自己的OAuth服务器。如果用户允许,您可以通过这种方式获取简单的用户配置文件信息,然后您可以利用它来访问其他API(同样,获得用户的许可)。 See this SO answer讨论了如何使用它来访问Google的其他API。

  

谢谢,请记住文档应该适合所有人!

在我与Google助理团队的对话中,他们 希望让文档更容易,希望他们会将您的许多建议铭记于心。我希望这些澄清能帮助你(以及其他任何有类似问题的人来到这里。)

相关问题