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