当前位置: 首页 > 知识库问答 >
问题:

OAuth2.0令牌奇怪行为(无效凭据401)

阳光辉
2023-03-14
  1. 用户确认使用选定范围访问Google帐户的权限。
  2. 将检索刷新令牌并将其保存到长时间存储中。
  3. 每次需要时(如果访问令牌过期),都将检索访问令牌并用于访问API。

但有时(到目前为止,超过6个月只有两次)我会经历奇怪的行为:

    + ------------------------------------------------------------------------- + 
    | 1.TRYING TO REFRESH THE TOKEN.                                            |
    | 2.DONE REFRESHING THE TOKEN.                                              |
    + ------------------------------------------------------------------------- + 
    |    access:           **************************************************** | 
    |   refresh:                  ********************************************* | 
    |   expires:                                                           3600 | 
    |   created:                                            2013-07-23 13:12:36 | 
    + ------------------------------------------------------------------------- + 

我还尝试通过向https://www.googleapis.com/oauth2/v1/tokeninfo发送请求来验证“新”访问令牌

    + ------------------------------------------------------------------------- + 
    | 1. TRYING TO CHECK THE TOKEN .                                            |
    | 2. DONE CHECKING THE TOKEN THE TOKEN.                                     |
    + ------------------------------------------------------------------------- + 
    |       issued_to:                  ************.apps.googleusercontent.com |
    |        audience:                  ************.apps.googleusercontent.com |
    |         user_id:                                             ************ |
    |      expires_in:                                                     3600 |
    |           email:                                     **********@gmail.com |
    |  verified_email:                                                        1 |
    |     access_type:                                                  offline |
    |         scopes::                                                          |
    + ------------------------------------------------------------------------- + 
    | https://www.googleapis.com/auth/userinfo.email                            |
    | https://www.googleapis.com/auth/userinfo.profile                          |
    | https://www.googleapis.com/auth/plus.me                                   |
    | https://www.googleapis.com/auth/drive                                     |
    + ------------------------------------------------------------------------- + 

但是当我尝试访问驱动器提要时,响应是:

    Error calling GET https://www.googleapis.com/drive/v2/files (401) Invalid Credentials

    domain:         global
    reason:         authError
    message:        Invalid Credentials
    locationType:   header
    location:       Authorization

我们在日历上也遇到了同样的问题。所以:

    null

问题

  1. 这种行为的原因是什么?如果刷新令牌被撤消或以其他方式无效,请求新的访问令牌是否会产生错误?
  2. 有验证刷新标记的方法吗?

共有1个答案

柴翰藻
2023-03-14
401: Invalid Credentials

Invalid authorization header. The access token you're using is either expired or invalid.

error: {
  errors: [
   {
  "domain": "global",
  "reason": "authError",
  "message": "Invalid Credentials",
  "locationType": "header",
  "location": "Authorization",
  }
  ],
  "code": 401,
  "message": "Invalid Credentials"
  }
}

这与您的错误版本完全匹配,因此很可能是谷歌认为您的请求是错误的。

但是,正如您所知,Google API请求可能返回对实际诊断问题明显无益的错误。由于多种原因,我得到了“无效凭据”错误。这几乎总是真的是因为我做了一些我认为无关紧要的改变,但真的很重要。

我的第一个想法(这里是在黑暗中拍摄的)是去Google API控制台:

Googles auth令牌验证器(https://www.googleapis.com/oauth2/v1/tokeninfo)可以返回一个有效的响应,但可能客户机机密或客户机id已经更改。

即使响应体中的微小变化也会导致此错误。

我不知道您是如何发出请求的,是通过REST调用还是客户端库,但我使用ruby库,它允许命令行接口发出API调用。我发现这一点&OAuth2游乐场在诊断Google API调用方面非常有帮助。

仅供参考:我只从Google API中得到了两个错误:“无效凭据”和“权限不足”。后者几乎总是与糟糕的范围有关。前者只是其他一切。

我还会说,如果你在6个月里只经历了2次错误,你是幸运的!

 类似资料:
  • 我有一个问题与Google plus访问令牌。它有时给我“无效凭据”错误消息,有时相同的标记显示为活动。 以下是步骤 是否有验证刷新令牌的方法?

  • 这是代码,我正在重复错误401:身份验证错误

  • 问题内容: 我在这里遇到了我无法理解的被感染的情况。我将要编写的有关功能的文档也没有任何东西可以说明这一点。 我有一张桌子和一个田野。我在巴西,一些在这一领域中的字符有口音,我的目标是没有口音创建一个类似的字段(由原始字符代替,因为这成为等等)。 我可以使用一堆函数像,和其他函数那样来做,但是我在互联网上发现一个接缝看起来更加优雅,然后我使用了它。那就是问题所在。 我的更新代码是这样的: 就像我说

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 当标题[currSlotNo]的值为空时,该行将导致错误: } HomeVu1.VdslotService updVideoSlotData pictureInst:331 Picid[currSlotNo]:331 HomeVu1.VdslotService updVideoSlotData Picmk:331 HomeVu1.VdslotService updVideoSlotData aud

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么