【问题标题】:Google OAuth One Time and save access token for future use(long live access token)Google OAuth One Time 并保存访问令牌以供将来使用(长期访问令牌)
【发布时间】:2013-08-08 16:59:46
【问题描述】:

我正在开发一个项目,在该项目中我使用 Google 分析 API 进行基于 JAVASCRIPT 的核心报告。用户登录并接受应用程序身份验证权限后谷歌分析代码工作正常。但是当用户从 google.com 或任何 google 的相关网站(如

)注销时

google+drive.google.comwww.google.com /分析

再次回到我的应用程序,它需要登录。他们是否有任何解决方案将用户访问令牌保存在 cookie 中,如果用户从任何谷歌引用网站注销并且我的应用程序使用其存储的长期访问令牌,因此无需再次登录。

为参考检查该链接。 https://oauth2-login-demo.appspot.com/profile

我用谷歌搜索了我的问题,在此期间我还检查了 Google 访问令牌默认时间是 60 分钟(1 小时)。我需要长期存在的用户访问令牌,因此不需要一次又一次地登录。它让用户感到沮丧。

【问题讨论】:

  • 您的问题解决了吗?我有同样的问题。

标签: javascript google-oauth access-token


【解决方案1】:

我知道已经很晚了,但是对于遇到这个的人来说。如果您使用的是 PHP 和 Google PHP Client,则需要在验证用户时将访问类型设置为离线:

$client->setAccessType("offline");

这会导致 Google 发回您为用户存储的刷新令牌。

然后,每次旧访问令牌过期时,您都可以使用此刷新令牌获取新的访问令牌:

$acess_token = $client->fetchAccessTokenWithRefreshToken($refresh_token);

在上面的检查中,我没有添加任何条件来查看旧的访问令牌是否确实已过期。但是上面返回一个数组,如果你检查它,你会看到它有一个名为“created”的键。 Google 似乎让访问令牌的有效期为 1 小时,因此您需要检查旧的创建时间,看看自该时间以来是否已经将近一小时,然后运行 ​​fetchAccessTokenWithRefreshToken() 方法。

您也可以使用$client->isAccessTokenExpired()

您可以在此处阅读更多相关信息:https://developers.google.com/identity/protocols/oauth2/web-server#offline(有其他语言的示例)

更新:

有时不会仅仅因为您将访问类型设置为“离线”而发送刷新令牌。除了$client->setAccessType("offline"); 之外,您还必须设置另一个属性始终确保取回刷新令牌

所以你会这样做:

$client->setAccessType("offline");
$client->setApprovalPrompt('force');

每次用户对其帐户进行身份验证时始终获取刷新令牌。

【讨论】:

    【解决方案2】:

    假设即使用户退出 Google,您也希望让用户保持登录状态,那么您只有一个选择,您必须推出自己的会话管理。你可以得到一个长期存在的令牌,一个刷新令牌,但绝对不要把它保存在 cookie 中,把它保存在数据库中。

    【讨论】:

    • 如何获取长寿命令牌和刷新令牌!!!如您所见,stackoverflow 也使用了我想要的相同场景。当在 stackover flow 中使用 google 登录时,它会在 session 中存储 google oauth cookie。
    猜你喜欢
    • 2017-06-16
    • 2013-05-26
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2020-03-10
    • 2014-11-20
    • 2014-03-19
    • 2017-06-09
    相关资源
    最近更新 更多