Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google api OAuth2.0令牌异常行为(无效凭据401)_Google Api_Google Oauth - Fatal编程技术网

Google api OAuth2.0令牌异常行为(无效凭据401)

Google api OAuth2.0令牌异常行为(无效凭据401),google-api,google-oauth,Google Api,Google Oauth,通常,GoogleOAuth2.0机制运行良好 用户确认使用选定范围访问Google帐户的权限 将检索刷新令牌并将其保存到长时间存储器中 每次需要时(如果访问令牌过期),都会检索访问令牌并将其用于访问API 但有时(到目前为止,6个多月内只有两次)我会经历奇怪的行为: 对Google API的请求返回无效凭据(401)错误。 刷新访问令牌(使用存储的刷新令牌)没有帮助 以下是我在测试此问题时得到的一些结构化输出: + ---------------------------------------

通常,GoogleOAuth2.0机制运行良好

  • 用户确认使用选定范围访问Google帐户的权限
  • 将检索刷新令牌并将其保存到长时间存储器中
  • 每次需要时(如果访问令牌过期),都会检索访问令牌并将其用于访问API 但有时(到目前为止,6个多月内只有两次)我会经历奇怪的行为:

    对Google API的请求返回无效凭据(401)错误。 刷新访问令牌(使用存储的刷新令牌)没有帮助

    以下是我在测试此问题时得到的一些结构化输出:

    + ------------------------------------------------------------------------- + | 1.TRYING TO REFRESH THE TOKEN. | | 2.DONE REFRESHING THE TOKEN. | + ------------------------------------------------------------------------- + | access: **************************************************** | | refresh: ********************************************* | | expires: 3600 | | created: 2013-07-23 13:12:36 | + ------------------------------------------------------------------------- + + ------------------------------------------------------------------------- + |1.正在尝试刷新令牌| |2.完成刷新令牌| + ------------------------------------------------------------------------- + |访问:******************************************************************************** |刷新:*********************************************************************** |有效期:3600天 |创建时间:2013-07-23 13:12:36 + ------------------------------------------------------------------------- + 我还尝试通过向发送请求来验证“新鲜”访问令牌

    + ------------------------------------------------------------------------- + | 1. 正在尝试检查令牌| | 2. 已完成对令牌的检查| + ------------------------------------------------------------------------- + |发布至:************.apps.googleusercontent.com| |观众:*********.apps.googleusercontent.com| |用户id:*************| |在:3600| |电子邮件:*********@gmail.com| |已验证的电子邮件:1| |访问类型:脱机| |范围::| + ------------------------------------------------------------------------- + | 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 调用GET时出错https://www.googleapis.com/drive/v2/files (401)无效凭证 域名:全球 原因:authError 消息:无效凭据 位置类型:标题 地点:授权 我们在日历方面也遇到了同样的问题。 因此:

  • 令牌之前有效(一切正常)
  • 刷新令牌仍然有效
  • 请求提要时会出现“无效凭据”错误
  • 所有其他标记仍然工作正常,这意味着代码是有效的
  • 通常,当令牌被撤销时,尝试刷新令牌时会返回“invalid_grant”错误

    问题

  • 这种行为的原因是什么?如果刷新令牌被撤销或以其他方式变得无效,那么对新访问令牌的请求是否会产生错误
  • 是否有方法验证刷新令牌

  • 根据谷歌API文件中关于错误和错误代码的说明:

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

    但是,正如您所知,GoogleAPI请求可能返回错误,这些错误对于实际诊断问题显然没有帮助。我收到“无效凭据”错误的原因有很多。这几乎总是真的,因为我做了一些我认为无关紧要的改变,但确实如此

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

    Googles auth token verifier()可以返回一个有效的响应,但可能客户端机密或客户端id已经更改

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

    我不知道您是如何发出请求的,无论是通过REST调用还是客户端库,但我使用ruby库,它允许命令行接口发出API调用。我发现OAuth2在诊断googleapi调用方面非常有用

    仅供参考:我从谷歌API只收到了两个错误:“无效凭证”和“权限不足”。后者几乎总是与坏的作用域有关。前者几乎是其他一切


    我还想说,如果你在6个月内只经历过2次错误,那你就是幸运的

    我最近遇到了这个奇怪的错误。我的修复方法:我在重定向到AuthUrl

    之前设置了一个函数,该函数取消了所有会话的设置。当我尝试在google控制台中更改重定向url,然后在服务器上更新我的json凭据文件时,遇到了这个问题。在重新开始之前,我必须清除会话变量。因此,在您的项目中,只需执行一次:

    session_start(); //starts a session
    session_unset(); //flushes out all the contents previously set
    

    请记住在干运行一次后删除
    会话\u unset()

    我正在使用开发环境。我也有这个问题

    首先,我试着刷新克里登
    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"
      }
    }
    
    session_start(); //starts a session
    session_unset(); //flushes out all the contents previously set
    
    // If modifying these scopes, delete your previously saved credentials
    // at ~/.credentials/sheets.googleapis.com-nodejs-quickstart.json
    var SCOPES = ['https://www.googleapis.com/auth/drive'];
    
    fs.readFile(TOKEN_PATH, function(err, token) {
        if (err) {
          getNewToken(oauth2Client, callback);
        } else {
            getNewToken(oauth2Client, callback);
        //   oauth2Client.credentials = JSON.parse(token);
        //   callback(oauth2Client);
        }
      });
    
    The redirect URI in the request, does not match the ones authorized for the OAuth client.
    
    gapi.client.init({
        'apiKey': API_KEY,  <-- DOESN'T WORK
        'clientId': CLIENT_ID,
        'discoveryDocs': DISCOVERY_URLS,
        'scope': SCOPE
    }).then(function() {
        // gapi.client.setApiKey(API_KEY); <-- ADD THIS
    })