尝试将此问题组织成清晰的问题。我们正在将Google for Work集成到我们的应用程序中,以便使用登录,Google+和最终的联系人,日历等。正如Google推荐的以及我读过的所有内容,我们将使用增量访问,只在需要时添加范围。我们是一家PHP商店。
但是,我们还需要离线访问,因为我们的联系人(最终是日历)访问权限将与我们的内部数据库同步。
我们当前在执行初始链接时捕获访问和刷新令牌,并将它们存储在本地,以便我们可以随时在访问令牌到期时使用刷新令牌重新授权。这工作正常。
问题:
a)在为Contacts添加增量范围时,文档说我们需要使用新范围调用页面javascript中的gapi.auth.signIn()
函数。这正在我们允许人们管理设置的页面上工作。在原始的登录函数回调中,我使用Ajax调用保存访问令牌和范围,该调用使用传递给回调的访问代码,并调用Google_Client authenticate()
函数来获取访问代码和范围......但是点,我得到的信息没有新的范围。为什么?每次绘制页面时是否必须重新扩展范围?
b)因为我们要进行批量处理来进行联系同步,我是否需要使用access_type=offline
获取完全不同的访问令牌,或者我可以使用当前访问令牌(使用新的正确扩展)范围)。离线访问令牌可以用于在线访问以及离线访问吗?反之亦然?
答案 0 :(得分:2)
对于你的问题:
a)你使用过参数“include_granted_scopes”吗?如上所述: https://developers.google.com/accounts/docs/OAuth2WebServer#incrementalAuth
b)当您请求离线访问令牌时,响应包含访问令牌和刷新令牌。因此,您可以在访问令牌过期后刷新,而无需用户再次授予权限。
在线访问令牌和离线访问令牌也适用于此。
它在没有涉及用户的情况下过期时刷新访问令牌的能力之间的差异。哪种是离线类型的功能。 在线访问令牌并不意味着它适用于您的客户端身份验证(在浏览器中完成),而离线适用于服务器端。
您提到您可以从应用的客户端获取访问令牌,刷新令牌和授权码。您可以将该信息发送到您的服务器并从那里拨打api电话,虽然这不是一个好习惯。
我建议您在服务器端执行OAuth Flow,然后管理用户信息和API调用。
您可以在此处找到有关Web server应用程序和Client Side应用程序的文档。
希望它更清楚。