我创建了一个bash脚本,它使用gcalcli连接到google日历和列表事件。为此,我为Google日历启用了API,并生成了一个OAuth2令牌,它基本上是一个包含访问令牌、刷新令牌、到期日期和其他信息的.json文件。
我的脚本每小时连接到日历,接收任何事件并发送电子邮件给我。在该脚本中,我还监视令牌的过期情况,以确保它是最新的,并且不会出现任何连接问题。
一个星期以来,这一标记一直都是最新的。每小时我都会收到电子邮件,并检查令牌是否是最新的。但每7天早上01:00,令牌过期,我必须生成一个新的。我看到的错误如下:
oauth2client.client.HttpAccessTokenRefreshError: invalid_grant: Token has been expired or revoked.这是我收到的在23:00的电子邮件-这是正常的整个星期,总是落后1小时。
token expiry 26/03/2022-22:00:06这是我收到的在00:00的电子邮件--这里的时间没有意义。还差1小时38分钟。
token expiry 26/03/2022-22:22:37和在01:00我得到了这个错误:
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
,到目前为止,我尝试了什么来解决这个问题?
我怀疑这是google的一个设置,但我不知道还可以尝试什么。
是什么引起了这里的问题?
发布于 2022-03-27 11:19:59
如果您检查文档oauth2#expiration,您会发现它声明
项目的OAuth同意屏幕配置为外部用户类型,发布状态为“测试”,该项目将在7天内到期。
当您的应用程序正在测试时,刷新令牌只能运行七天。之后,对应用程序的访问将被撤销,刷新令牌将自动过期。
解决方案是在oauth同意屏幕下的Google控制台上将您的项目设置为生产。
https://stackoverflow.com/questions/71634810
复制相似问题