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