令牌已过期或被吊销 - 谷歌OAuth2刷新令牌在几天后过期

31

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

  • https://console.developers.google.com/凭据部分创建OAuth客户端ID。
  • 在同意屏幕中,将发布状态设置为测试。
  • 在OAuth 2.0 Playground中,使用上述生成的客户端ID和客户端密钥获得刷新令牌。
  • 然后,我使用它来生成访问令牌。

但几天后,刷新令牌过期了,尽管刷新令牌的有效性是终身的。

8个回答

61

2
这是我的问题。谢谢! - Levi Nunnink
18
请访问OAuth同意屏幕,并单击发布按钮,将状态从测试更改为已发布。 - Spikatrix
1
@Spikatrix 谷歌要求进行验证才能发布应用程序。有没有绕过验证流程的方法? - alper
3
@alper 如果我没记错的话,你不需要验证就可以发布应用程序。如果您没有进行验证,用户将收到有关不受信任应用程序的警告。对于测试目的,这是可以接受的,但如果您要部署到生产环境,则我认为没有绕过验证的方法。 - Spikatrix
3
我只是想确认一下Spikatrix所说的内容,因为Google Cloud Console中的措辞非常误导。尽管控制台中有所有的警告,但您无需验证该应用程序。我的实验表明,只要应用程序的“发布状态”显示为“生产中”,令牌就不会在7天后过期。 - Etienne Dechamps
显示剩余7条评论

20

我需要使用nodemailer从我拥有访问权限的gmail帐户发送邮件。它能正常工作几天,然后我的刷新令牌神秘地被吊销,尽管这个帐户属于我。通过谷歌搜索我来到了这里,并一直关注着希望有人能提供解决方案。

正如你所提到的,这似乎只会发生在测试/未验证的应用程序上,我猜测谷歌会在几天后吊销此类应用程序的令牌。经过多次尝试和错误,以下是我所做的。

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

  1. 按照SO post中所述生成新的刷新令牌(现有的令牌很可能已被吊销)
  2. 进入您的谷歌帐户仪表板的安全选项卡
  3. 在“最近的安全活动”部分下,您应该能看到有关您的应用程序的安全警报。
  4. 单击通知旁边的上下文菜单,然后单击忽略
  5. 此时您将看到一个选项对话框,在其中指定您对应用程序的信任级别。我只是说我相信这个开发者/应用程序,显然。就这样了!刷新令牌应该在此之后持续存在。

我在其他地方找不到任何相关的信息。


2
这是为了防止新令牌在一周后过期吗?我上周忽略了安全通知,现在我的新令牌又过期了。希望我没有漏掉什么。根据谷歌的API验证例外,个人使用不需要进行验证,但没有详细说明如何表明应用程序是用于个人使用而不是测试。 - dannypernik
2
这个解决方法对我无效。我找到了安全活动菜单并取消,但令牌仍在7天后过期。 - Etienne Dechamps
@EtienneDechamps,正如上面提到的https://dev59.com/-1EG5IYBdhLWcg3wb9gL#67966982,测试应用程序的令牌最长有效期为7天。 - dave-ok
2
你应该看到你的应用程序的安全警报。不是。 - Alex Deft

7
另一个答案指引了我方向,但是对于我来说,选项在其他地方:安全性 > 安全检查/发现的安全问题 > 在您的应用程序旁边的上下文菜单 > 解除。

3

我的操作:

  1. 前往https://console.cloud.google.com/apis/credentials/consent并将状态从测试更改为已发布。
  2. 删除当前的令牌文件。
  3. 通过登录您的Gmail帐户再次授权API。您将被发送到一个警告屏幕。从那里,您可以选择继续。
  4. 完成后,您将获得一个新的令牌文件。

1
这只会让你与谷歌团队进行来回交流,试图验证你的应用程序。最终,他们只会说,由于它是用于个人使用,继续使用未经验证的应用程序..而我们仍然不得不每周手动更改令牌。 - Modular Economy
1
正如@etienne-dechamps所说:“尽管控制台中有所有的警告,但你不需要验证该应用程序。” - Bananasmoothii
这应该被接受的答案。 - undefined

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

0

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


3
实际上,这似乎与被验证无关。只有当应用程序仍处于测试阶段时才会出现这种情况。 - Linda Lawton - DaImTo

0

我在使用 Woocommerce 预约日历同步应用时遇到了问题。一直断开连接,文档里也没有解决方法。于是我联系了他们的支持团队,得知要前往 OAuth consent screen 并将发布状态从“测试”更改为“生产”。

这是我注意到的错误:

错误:无法使用刷新令牌获取访问令牌。谷歌同步被禁用,直到重新认证。错误:“invalid_grant”,“令牌已过期或已被吊销。” 提醒:无效的访问令牌。需要重新连接 Google。代码 0。消息:无效的令牌格式。


0

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

我能够在没有经过验证的应用程序的情况下使其工作。也许refresh()方法在我的应用程序经过验证后会起作用。对此不确定。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接