【问题标题】:Google OAuth2 - tokens, on-line, offline, adding scopes incrementallyGoogle OAuth2 - 令牌,在线,离线,逐步添加范围
【发布时间】:2015-02-12 09:13:25
【问题描述】:

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

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

我们目前在做初始链接时会捕获Access和Refresh Token,并将它们存储在本地,这样每当Access Token过期时,我们就可以随时使用Refresh Token重新授权。这工作正常。

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

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

【问题讨论】:

    标签: access-token google-contacts-api offline-mode


    【解决方案1】:

    对于您的问题:

    a) 您是否使用过参数“include_granted_scopes”?如此处所述: https://developers.google.com/accounts/docs/OAuth2WebServer#incrementalAuth

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

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

    两者的区别在于它能够在访问令牌过期而不涉及用户的情况下刷新访问令牌。这是离线类型的功能。 在线访问令牌并不意味着它适用于您的客户端身份验证(在浏览器中完成)而离线适用于服务器端。

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

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

    您可以在此处找到有关Web server 应用程序和Client Side 应用程序的文档。

    希望它更清楚。

    【讨论】:

    • 非常感谢,杰拉尔多。您确实回答了最大的问题 - 离线和在线令牌是否相同。我的工作要好得多。现在,只要我能让 etags 表现得更好……
    • 如果这个解决方案有帮助,请接受它作为答案。
    • 嗯...怎么样?不得不说,StackOverflow 上的界面有点……做作。
    猜你喜欢
    • 2014-01-21
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多