OAUTH2.0服务器应该在哪里用于Google / Firebase上的操作

时间:2017-09-27 12:17:51

标签: firebase oauth-2.0 google-cloud-functions actions-on-google

参考 - https://developers.google.com/actions/identity/oauth2-code-flow我正在使用动作SDK,这意味着我使用Firebase函数进行履行处理。

我根据我在Android应用中从FirebaseUser.getUid()获得的UID将信息存储在Firebase中。到目前为止一切都很好。

我已经设置了一个模拟OAuth2.0服务器,这似乎很高兴交换令牌。

然而,稍后在文档中指出:

“您服务的API端点使用访问令牌来识别Google代表其进行API调用的用户,并验证Google是否有权代表用户访问该端点。”

然而,我的实现是在Firebase功能中。所以...

我是否需要让我的FirebaseFunction从OAuth2.0服务器获取用户ID?我是否需要在Firebase功能中设置OAuth2.0服务器? OAuth2.0服务器在哪里?如何让我的Firebase功能获得与Android报告的相同的用户ID?

1 个答案:

答案 0 :(得分:2)

首先 - 你从一个小的误解开始。 Google和Actions SDK上的操作需要Firebase功能才能实现。 Firebase功能执行使其更容易 - 它们提供了webhook所需的可公开访问的HTTPS端点,但是如果您拥有自己的服务器(具有有效的SSL证书),或者您希望使用AWS Lambda或类似的东西,你当然可以这样做。如果你想使用JavaScript之外的语言,那么所使用的JSON协议就会被记录下来(虽然有时候并不清楚)。

回答你的问题:

如果你需要webhook中的UserID,那么是的,它需要一些方法来获得该UserID,并给出它将被传递的访问令牌。但是,如何执行此操作取决于您实施OAuth服务器和令牌的方式。例如:

  • 如果您使用签名的JTW作为您的令牌,那么UserID是JWT的一部分,您的所有webhook需要做的是提取此并验证JWT上的签名和时间范围是否有效。您无需联系任何其他服务器即可执行此操作。

  • 如果您在Firebase或其他一些数据库或数据存储中存储令牌和相应的用户信息 - 只需从您的webhook中读取令牌即可!

  • 您当然可以创建另一个HTTPS端点,您可以使用它来验证令牌并从中获取信息 - 例如,Google就是这样做的。

您的OAuth服务器需要比您的webhook更多地使用Firebase功能。它可能是一个生活的好地方(以及Firebase Hosting上的身份验证页面),但它并不是必需的。

您的OAuth服务器可以放在任何地方。好吧,无论如何,互联网上公共的任何地方都有一个有效的SSL证书。

最后一点正是帐户链接的全部内容。您需要确保,当他们针对您的服务器进行身份验证时,您将获得Android"报告的UserID,无论您在上下文中的含义是什么(但请参阅下面的更新)。拥有此UserID后,您需要确保它与您为此用户发出的任何令牌相关联,并且您需要为您的服务提供一种从令牌获取此UserID的方法。

你如何取决于你,取决于你的架构的其余部分以及你尝试用它做什么。 Google智能助理并不关心 - 它有自己的UserId概念,与您的用户分开,因此要使用您的UserId识别用户,您将使用它提供给您的令牌。

<强>更新

您在关于statement&#34的评论中提出了一个好的观点; Android设备上的用户ID也将与Google Home&#34;上的用户ID相同。这是事实,但是讨论了通过Assistant平台提供的类似匿名cookie的UserID(这就是为什么它出现在匿名用户身份部分)。它没有谈论您可以通过其他Android应用获得的任何ID。要将通过其他应用获得的ID与智能助理ID相关联,您需要将帐户关联用作described on the following page

如果您需要的是一种一致的方式来跟踪多次访问您的操作的用户,并且您希望在任何智能助理平台(Google Home,Android助手或iOS助手)上保持一致,那么您只需需要使用通过API / JSON提供的UserID。您不需要帐户关联或OAuth服务器。但这不是Google ID或Firebase ID,它是匿名用户ID,仅在助理平台上有效(然后,仅在某些条件下,如果用户未重置它)。

更新2 要明确OAuth和JWT:

你在问题​​中提出问题&#34;我还能在哪里获得JWT?&#34;

简而言之 - 你自己建造它。

请记住,如果您要提供OAuth服务器,您需要做的一件事就是发出身份验证令牌并刷新令牌。这些令牌可以是您想要的任何东西 - 唯一的标准是您的webhook能够获取令牌,并以某种方式从其中获取所需的信息,将其与用户联系起来。

负责将信息放在那里。

因此,当用户在帐户关联期间登录时,您可以使用Firebase身份验证将其登录。完成此操作后,您可以为他们获取Firebase ID和/或Google ID。 (毕竟,他们已经登录了您的OAuth网页 - 您必须了解他们的相关信息。)

他们登录后,您会将其重定向到Google要求您的某个地方,并且您将其中包含令牌作为其中一部分。该令牌可以是您正在创建的JWT,在该JWT中,您可以包含您登录时的ID信息。

(而且,再次......它不一定是JWT。它可以是你想要的任何东西。唯一的要求是你能够验证它并用它来获取你需要的信息。 )