如何永久使用oauth2令牌?

vin*_*pan 3 google-calendar-api google-api oauth-2.0 google-oauth

我想在我的网站中永久使用 oauth2 令牌。

使用谷歌 API,当用户授予管理其谷歌日历的权限时,我将从谷歌 API 获取访问令牌。我想将它保存在数据库中并长期使用它。

但它正在变得无效。我尝试使用 oauth2 刷新令牌 API 刷新令牌。但出现如下错误。

数组([error] => invalid_grant [error_description] => 令牌已过期或撤销。)

我不希望用户每次进入网站时都授予权限。

我还希望管理员需要使用此令牌或任何其他方式(如果有)访问用户的日历。

我怎样才能实现这个目标?

vin*_*pan 5

我使用刷新令牌选项,而不是尝试获取永久令牌。

当我使用标签调用谷歌日历时,我添加了“access_type=offline”等参数,如下所示

$login_url = ' https://accounts.google.com/o/oauth2/auth?scope= ' 。urlencode(' https://www.googleapis.com/auth/calendar ') 。'&redirect_uri=' 。CLIENT_REDIRECT_URL 。'&response_type=code&client_id=' 。CLIENT_ID。'&access_type=离线';

用户允许后,我将获得 access_token 和刷新令牌作为响应。我将它们保存在数据库中。然后每次,当管理员访问用户的日历时,都会通过refresh_token api 调用使用存储在数据库中的refresh_token 获取新的access_token,直到用户在我的站点中使用取消同步选项。

一旦用户取消同步日历,我将更新数据库。问题解决了。