'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 来获取分析数据。我尝试使用以下步骤对其进行身份验证:
- 在 https://console.developers.google.com/ 凭据部分创建了 OAuth 客户端 ID。
- 在同意屏幕中我将发布状态设置为测试
- 在 OAuth 2.0 Playground 中,我使用上面生成的客户端 ID 和客户端密码获得了刷新令牌
- 然后我用它来生成访问令牌。
但是几天后,刷新令牌就过期了,虽然上面提到刷新令牌的有效期是终身的。
我需要使用 nodemailer 从我有权访问的 gmail 帐户发送邮件。在我的刷新令牌被神秘地撤销之前,它可以工作几天,即使该帐户属于我。 google 搜索将我带到了这里,我已经观察了一段时间,希望有人能提供解决方案。
正如您提到的,这似乎只发生在 test/unverified 个应用程序上,我猜 google 会在几天后撤销您帐户中此类应用程序的令牌。经过多次试验和错误,这就是我所做的。
注意:此解决方案仅适用于您拥有的帐户,否则您必须验证您的应用才能访问其他人的帐户
- 按照此 SO post
中的描述生成一个新的刷新令牌(现有的很可能已被撤销)
- 转到您的 google 帐户仪表板的 security tab
- 在最近的安全 activity 部分下,您应该会看到针对您的应用程序的安全警报。
- 单击通知旁边的上下文菜单,然后单击 关闭
- 此时您将看到一个选项对话框,您可以在其中指明您对该应用程序的信任级别。显然,我只是继续说我信任 developer/app。就是这样!刷新令牌应在此之后保留。
我在其他任何地方都找不到相关内容。
另一个答案为我指明了正确的方向,但对我而言,选项位于其他地方:安全 > 安全 checkup/security 发现问题 > 应用程序旁边的上下文菜单 > 关闭
这个问题似乎是针对未经验证的应用程序,只需从您的项目中删除令牌文件并重新运行项目,它将创建一个新令牌。
如果您的应用处于测试模式,则用户令牌将在 7 天后过期。请在此处找到此解释:https://support.google.com/cloud/answer/10311615#zippy=%2Ctesting
解决方案是删除您的 token.json
文件以强制 Google 寻找新令牌。
我能够在没有经过验证的应用程序的情况下让它工作。一旦我的应用程序通过验证,refresh()
方法可能会起作用。不确定那个。
我的问题是当我添加 access_token
而不是 refresh_token
时。
我正在使用 Google 分析 API 来获取分析数据。我尝试使用以下步骤对其进行身份验证:
- 在 https://console.developers.google.com/ 凭据部分创建了 OAuth 客户端 ID。
- 在同意屏幕中我将发布状态设置为测试
- 在 OAuth 2.0 Playground 中,我使用上面生成的客户端 ID 和客户端密码获得了刷新令牌
- 然后我用它来生成访问令牌。
但是几天后,刷新令牌就过期了,虽然上面提到刷新令牌的有效期是终身的。
我需要使用 nodemailer 从我有权访问的 gmail 帐户发送邮件。在我的刷新令牌被神秘地撤销之前,它可以工作几天,即使该帐户属于我。 google 搜索将我带到了这里,我已经观察了一段时间,希望有人能提供解决方案。
正如您提到的,这似乎只发生在 test/unverified 个应用程序上,我猜 google 会在几天后撤销您帐户中此类应用程序的令牌。经过多次试验和错误,这就是我所做的。
注意:此解决方案仅适用于您拥有的帐户,否则您必须验证您的应用才能访问其他人的帐户
- 按照此 SO post 中的描述生成一个新的刷新令牌(现有的很可能已被撤销)
- 转到您的 google 帐户仪表板的 security tab
- 在最近的安全 activity 部分下,您应该会看到针对您的应用程序的安全警报。
- 单击通知旁边的上下文菜单,然后单击 关闭
- 此时您将看到一个选项对话框,您可以在其中指明您对该应用程序的信任级别。显然,我只是继续说我信任 developer/app。就是这样!刷新令牌应在此之后保留。
我在其他任何地方都找不到相关内容。
另一个答案为我指明了正确的方向,但对我而言,选项位于其他地方:安全 > 安全 checkup/security 发现问题 > 应用程序旁边的上下文菜单 > 关闭
这个问题似乎是针对未经验证的应用程序,只需从您的项目中删除令牌文件并重新运行项目,它将创建一个新令牌。
如果您的应用处于测试模式,则用户令牌将在 7 天后过期。请在此处找到此解释:https://support.google.com/cloud/answer/10311615#zippy=%2Ctesting
解决方案是删除您的 token.json
文件以强制 Google 寻找新令牌。
我能够在没有经过验证的应用程序的情况下让它工作。一旦我的应用程序通过验证,refresh()
方法可能会起作用。不确定那个。
我的问题是当我添加 access_token
而不是 refresh_token
时。