首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google日历API - invalid_grant:令牌已过期或被撤销

Google日历API - invalid_grant:令牌已过期或被撤销
EN

Stack Overflow用户
提问于 2022-03-27 08:32:31
回答 3查看 762关注 0票数 0

我创建了一个bash脚本,它使用gcalcli连接到google日历和列表事件。为此,我为Google日历启用了API,并生成了一个OAuth2令牌,它基本上是一个包含访问令牌、刷新令牌、到期日期和其他信息的.json文件。

我的脚本每小时连接到日历,接收任何事件并发送电子邮件给我。在该脚本中,我还监视令牌的过期情况,以确保它是最新的,并且不会出现任何连接问题。

一个星期以来,这一标记一直都是最新的。每小时我都会收到电子邮件,并检查令牌是否是最新的。但每7天早上01:00,令牌过期,我必须生成一个新的。我看到的错误如下:

代码语言:javascript
运行
复制
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Token has been expired or revoked.

这是我收到的在23:00的电子邮件-这是正常的整个星期,总是落后1小时。

代码语言:javascript
运行
复制
token expiry 26/03/2022-22:00:06

这是我收到的在00:00的电子邮件--这里的时间没有意义。还差1小时38分钟。

代码语言:javascript
运行
复制
token expiry 26/03/2022-22:22:37

在01:00我得到了这个错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
 File "/usr/bin/gcalcli", line 11, in <module>
   load_entry_point('gcalcli==4.3.0', 'console_scripts', 'gcalcli')()
 File "/usr/lib/python3/dist-packages/gcalcli/cli.py", line 152, in main
   gcal.AgendaQuery(start=parsed_args.start, end=parsed_args.end)
 File "/usr/lib/python3/dist-packages/gcalcli/gcal.py", line 1238, in AgendaQuery
   return self._display_queried_events(start, end)
 File "/usr/lib/python3/dist-packages/gcalcli/gcal.py", line 1182, in _display_queried_events
   event_list = self._search_for_events(start, end, search)
 File "/usr/lib/python3/dist-packages/gcalcli/gcal.py", line 1129, in _search_for_events
   events = self._retry_with_backoff(
 File "/usr/lib/python3/dist-packages/gcalcli/gcal.py", line 112, in _retry_with_backoff
   return method.execute()
 File "/usr/lib/python3/dist-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
   return wrapped(*args, **kwargs)
 File "/usr/lib/python3/dist-packages/googleapiclient/http.py", line 849, in execute
   resp, content = _retry_request(
 File "/usr/lib/python3/dist-packages/googleapiclient/http.py", line 165, in _retry_request
   resp, content = http.request(uri, method, *args, **kwargs)
 File "/usr/lib/python3/dist-packages/oauth2client/transport.py", line 186, in new_request
   credentials._refresh(orig_request_method)
 File "/usr/lib/python3/dist-packages/oauth2client/client.py", line 761, in _refresh
   self._do_refresh_request(http)
 File "/usr/lib/python3/dist-packages/oauth2client/client.py", line 819, in _do_refresh_request
   raise HttpAccessTokenRefreshError(error_msg, status=resp.status)
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Token has been expired or revoked.

它显示了invalid_grant: Token has been expired or revoked

,到目前为止,我尝试了什么来解决这个问题?

  • 在谷歌上,我发布了该项目的制作,但没有任何效果。
  • 我没有达到任何OAuth利率限制,因为每天有10,000笔赠款
  • 我每小时确认一次,令牌是刷新的(直到7天过去)。
  • google帐户的密码没有更改。
  • 刷新令牌每小时使用一次,因此不会在一周内过期。
  • 没有任何令牌被撤销,只有我可以访问这个google帐户。

我怀疑这是google的一个设置,但我不知道还可以尝试什么。

是什么引起了这里的问题?

EN

Stack Overflow用户

发布于 2022-03-27 11:19:59

如果您检查文档oauth2#expiration,您会发现它声明

项目的OAuth同意屏幕配置为外部用户类型,发布状态为“测试”,该项目将在7天内到期。

当您的应用程序正在测试时,刷新令牌只能运行七天。之后,对应用程序的访问将被撤销,刷新令牌将自动过期。

解决方案是在oauth同意屏幕下的Google控制台上将您的项目设置为生产。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71634810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档