使用OAuth 2.0 Google + API的烦人无效凭据
-
22-10-2019 - |
题
我正在尝试将OAuth 2.0用于我的网站上的Google + API,但我一直在获取:
{
"error": {
"errors": [{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}],
"code": 401,
"message": "Invalid Credentials"
}
}
问题是,我不知道为什么会发生这种情况。我有Google的有效访问令牌,但是Google告诉它是无效的。我知道令牌没有到期,因为JSON数据是在获得访问令牌的10秒内请求的。这是我正在使用的过程:
- 让用户授权请求。
- 从Google获取请求代码。
- 用途
cUrl
请求使用Google的请求代码请求访问令牌。 - 将访问代码放入PHP会话中。
- 重定向回到主页。
- 主页检测会话变量已设置,并且不显示登录链接。
- 主页上的PHP用途
readFile
从Google那里获得JSON响应。 - Google返回无效的凭据。
这是PHP生成的URI示例,该示例已插入ReadFile:
请帮忙?
解决方案
您是否尝试过Google API客户端之一?您可以使用一些入门应用程序来滚动。
其他提示
您不应该共享一个不变的访问令牌 - 有人可以使用它来模仿您(实际上是为了被授予的任何人)。
最好将验证令牌作为标头传递,例如:
curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"
不确定这是否是必不可少的,但是您的错误消息似乎表示标题中的验证错误,因此您可能会提供一个不符合所需的授权标题。
这是使用PHP的解决方案 Pecl Oauth 扩大。将以您定义的方式签署请求。在这种情况下,在脚本中导入的配置文件json对象中。
$oauth = new OAuth($this->config->consumer_key, $this->config->consumer_secret, $this->config->signature_method, $this->config->auth_type);
$oauth->setVersion($this->config->version);
$oauth->setToken($accessToken->oauth_token, $accessToken->oauth_token_secret);
$params = array(
'fields' => 'displayName,emails,id,image,name',
'pp' => 1
);
$oauth->fetch('https://www.googleapis.com/plus/v1/people/me', $params, OAUTH_HTTP_METHOD_GET);
// extract response
$json = Zend_Json::decode($oauth->getLastResponse(), Zend_Json::TYPE_OBJECT);
我以前有这个问题,但是有Twitter。
对于Oauth实际上,我们两次与Twitter进行沟通,首先要获取请求令牌,其次是授权发送已经签署的第一个令牌。也许您只能克服第一。
几个小时,我一直在遇到相同的401“无效凭据”错误。比我注意到我将Access_Token存储在VARCHAR(50)字段中的数据库中。它切断了Access_Token的一部分。我增加了列长度。固定的。
仔细检查数据库中的字段长度,您可以在其中存储access_token以及Refresh_token!
我觉得 me
API被打破了。当我尝试请求具有真实用户ID的URI时,问题就消失了。我的意思是这样: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}
删除您的 token.json 文件,然后再次尝试请求。
对我来说,问题是get/post请求的标题“授权”:
Google文档说:授权: / * Oauth 2.0在这里 * /
但是正确的是:授权:oauth / * oauth 2.0在这里 * /
是的!在您的令牌键之前包括“誓言”!
如果您使用的是卷曲(PHP),请使用:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));