Google OAuth一次性并保存访问令牌以备将来使用(长期访问令牌)

Google OAuth One Time and save access token for future use(long live access token)

本文关键字:访问令牌 将来 一次性 OAuth 保存 Google      更新时间:2023-09-26

我正在进行一个项目,在该项目中,我使用Google分析API进行基于JAVASCRIPT的核心报告。用户登录并接受应用程序身份验证权限后,谷歌分析代码运行良好。但当用户从谷歌网站或任何谷歌相关网站(如)注销时

google+drive.google.com,www.google.com/analytics

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

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

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

我知道已经晚了,但对于遇到这种情况的人来说。如果您使用的是PHP和GooglePHP客户端,那么在验证用户时需要将访问类型设置为离线:

$client->setAccessType("offline");

这将导致谷歌发回一个你为用户存储的刷新令牌。

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

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

在上面的检查中,我没有添加任何条件来查看旧的访问令牌是否确实过期。但是上面返回了一个数组,如果你检查它,你会发现它有一个名为"的键;创建";。谷歌似乎让访问令牌的有效期为1小时,所以你应该对照旧创建的时间进行检查,看看从那时起是否已经快一个小时了,然后运行fetchAccessTokenWithRefreshToken()方法。

或者,您可以使用$client->isAccessTokenExpired()

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

更新:

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

所以你应该这样做:

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

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

假设你想让用户登录,即使他们从谷歌注销,那么你只有一个选择,你必须推出自己的会话管理。你可以得到一个长寿命的令牌,一个刷新令牌,但绝对不要把它保存在cookie中,而是保存在数据库中。