Google OAuth2 - 令牌、在线、离线、增量添加范围

Google OAuth2 - tokens, on-line, offline, adding scopes incrementally

试图将这个问题组织得更清楚。我们正在将 Google for Work 集成到我们的应用程序中,以使用登录、Google+,以及最终的联系人、日历等。正如 Google 和我所阅读的所有内容所推荐的,我们是将使用增量访问,仅在需要时添加范围。我们是 PHP 商店。

但是,我们还需要离线访问,因为我们的联系人(以及最终的日历)访问将与我们的内部数据库同步。

我们目前在执行初始 link 时捕获访问和刷新令牌,并将它们存储在本地,以便我们可以在访问令牌过期时随时使用刷新令牌重新授权。这工作正常。

问题:
a) 在为联系人添加增量范围时,文档说我们需要使用新范围调用页面 javascript 中的 gapi.auth.signIn() 函数。这在我们允许人们管理设置的页面上有效。在原始登录函数回调中,我使用 Ajax 调用保存访问令牌和范围,该调用使用传递到回调中的访问代码,并调用 Google_Client authenticate() 函数来获取访问代码和范围。 . 但那时,我得到的信息没有新的范围。为什么?每次绘制页面时都必须重新扩展范围吗?

b) 由于我们将使用批处理进行联系人同步,我是否需要使用 access_type=offline 获取完全不同的访问令牌,或者我是否可以使用当前访问令牌(正确扩展为新范围)。离线访问令牌可以用于在线访问和离线访问吗?或者反之亦然?

您的问题:

a) 你用过参数"include_granted_scopes"吗?如此处所述: https://developers.google.com/accounts/docs/OAuth2WebServer#incrementalAuth

b) 当您请求离线访问令牌时,响应包含访问令牌和刷新令牌。因此您可以在访问令牌过期后刷新访问令牌,而无需用户再次授予权限。

在线访问令牌和离线访问令牌作用相同。

两者在访问令牌过期时无需用户参与即可刷新访问令牌的能力之间的区别。这是离线类型的功能。 在线访问令牌并不意味着它适用于您的客户端身份验证(在浏览器中完成)并且离线适用于服务器端。

您提到您可以从应用程序的客户端获取访问令牌、刷新令牌和授权代码。您可以将该信息发送到您的服务器并从那里进行 api 调用,尽管这不是一个好的做法。

我建议您在服务器端执行 OAuth 流程,然后从那里管理用户信息和 API 调用。

在这里您可以找到关于这两个 Web server applications and Client Side 应用程序的文档。

希望它更清楚。