我们是否需要在数据库中存储OAuth 2.0刷新令牌?

时间:2014-01-03 10:26:08

标签: php oauth google-oauth

我有一个使用OAuth2.0作为登录框架的Web应用程序。但是,在用户登录一段时间后,例如1小时,应用程序实际上会给出错误:

“PHP致命错误:未捕获的异常'Google_AuthException',并显示消息'OAuth 2.0访问令牌已过期,并且刷新令牌不可用。对于自动批准的响应,不会返回刷新令牌。'在/home2/iaapro/public_html/test_app/google-api-php-client/src/auth/Google_OAuth2.php:221“

致命错误告诉刷新令牌不存在。当我阅读OAuth2.0 guide by Google时,如果访问类型=“离线”,那么用户将同时收到访问令牌和刷新令牌。

当我收到致命错误时,我只需要清除浏览器缓存和Cookie,然后再次运行。

我看到有人说,只要用户不撤销其帐户的访问权限,访问令牌和刷新令牌就可用。在我的情况下,它在一小时内过期,即使我没有这样做。

我无法在Google上找到有关此内容的更多信息。有人可以向我解释或建议我一些有用的参考吗?

如果我们需要将刷新令牌存储在数据库中,是否有可用的教程?

感谢。

2 个答案:

答案 0 :(得分:1)

您的访问令牌在一小时后过期,您需要一个需要存储的刷新令牌来获取另一个有效的访问令牌。要查找当前访问令牌的实时状态,请使用以下URL:

https://accounts.google.com/o/oauth2/revoke?token=YOUR-ACCESS-TOKEN-HERE

如果您收到可怕的错误消息,则表示已过期。

答案 1 :(得分:1)

OAuth身份验证为您提供一个有效一小时的访问令牌。它还将提供一个刷新令牌,可用于在第一次到期时(或以后的会话)获取新的访问令牌。

你应该存储刷新令牌吗?是的,如果您打算重新使用访问权限:每个帐户提供的刷新令牌数量有限制:

https://developers.google.com/accounts/docs/OAuth2?hl=ja#expiration