'Token has been expired or revoked' - Google OAuth2 刷新令牌几天后过期

'Token has been expired or revoked' - Google OAuth2 Refresh token gets expired in a few days

我正在使用 Google 分析 API 来获取分析数据。我尝试使用以下步骤对其进行身份验证:

但是几天后,刷新令牌就过期了,虽然上面提到刷新令牌的有效期是终身的。

我需要使用 nodemailer 从我有权访问的 gmail 帐户发送邮件。在我的刷新令牌被神秘地撤销之前,它可以工作几天,即使该帐户属于我。 google 搜索将我带到了这里,我已经观察了一段时间,希望有人能提供解决方案。

正如您提到的,这似乎只发生在 test/unverified 个应用程序上,我猜 google 会在几天后撤销您帐户中此类应用程序的令牌。经过多次试验和错误,这就是我所做的。

注意:此解决方案仅适用于您拥有的帐户,否则您必须验证您的应用才能访问其他人的帐户

  1. 按照此 SO post
  2. 中的描述生成一个新的刷新令牌(现有的很可能已被撤销)
  3. 转到您的 google 帐户仪表板的 security tab
  4. 最近的安全 activity 部分下,您应该会看到针对您的应用程序的安全警报。
  5. 单击通知旁边的上下文菜单,然后单击 关闭
  6. 此时您将看到一个选项对话框,您可以在其中指明您对该应用程序的信任级别。显然,我只是继续说我信任 developer/app。就是这样!刷新令牌应在此之后保留。

我在其他任何地方都找不到相关内容。

另一个答案为我指明了正确的方向,但对我而言,选项位于其他地方:安全 > 安全 checkup/security 发现问题 > 应用程序旁边的上下文菜单 > 关闭

这个问题似乎是针对未经验证的应用程序,只需从您的项目中删除令牌文件并重新运行项目,它将创建一个新令牌。

如果您的应用处于测试模式,则用户令牌将在 7 天后过期。请在此处找到此解释:https://support.google.com/cloud/answer/10311615#zippy=%2Ctesting

解决方案是删除您的 token.json 文件以强制 Google 寻找新令牌。

我能够在没有经过验证的应用程序的情况下让它工作。一旦我的应用程序通过验证,refresh() 方法可能会起作用。不确定那个。

我的问题是当我添加 access_token 而不是 refresh_token 时。