我正在尝试在我的网站上使用oauth 2.0 for google + api,我一直在:
{
"error": {
"errors": [{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}],
"code": 401,
"message": "Invalid Credentials"
}
}
问题是,我不知道为什么会这样。我有一个来自谷歌的有效访问令牌,但谷歌告诉它是无效的。我知道令牌尚未过期,因为json数据是获取访问令牌后10秒内谷歌的请求。这是我正在使用的过程:
cUrl
使用google的请求代码请求访问令牌。readFile
来获取谷歌的json响应。这是一个由php生成的示例uri,插入readFile:
请帮忙吗?
答案 0 :(得分:3)
你不应该共享一个未经改动的访问令牌 - 有人可以使用它来冒充你(真的是为了被授予的任何人)。
最好将Auth令牌作为标题传递,例如:
curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"
不确定这是否必要,但您的错误消息似乎表明标题中存在auth错误,因此您可能提供的授权标题与您需要的标题不匹配。
答案 1 :(得分:2)
以下是使用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);
答案 2 :(得分:1)
您是否尝试过其中一个Google API客户端?您可以使用启动器应用程序来推动滚动。
答案 3 :(得分:0)
我以前遇到过这个问题但是有了推特。
对于OAuth,我们实际上与Twitter进行了两次通信,首先获取请求令牌,然后授权发送已签名的第一个令牌。 也许你只是克服了第一个。
答案 4 :(得分:0)
我在几个小时内收到相同的401“无效凭据”错误。我注意到我将access_token存储在VARCHAR(50)字段的数据库中。它切断了access_token的一部分。我增加了列长度。固定。
仔细检查存储access_token的数据库中的字段长度以及refresh_token!
答案 5 :(得分:0)
我认为me
API已被破坏。当我尝试请求具有真实用户ID的URI时,问题就消失了。我的意思是这样的:https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}
答案 6 :(得分:0)
删除您的 token.json 文件,然后再次尝试请求。
答案 7 :(得分:-1)
我的问题是标题"授权"在GET / POST请求中:
Google文档说:授权:/ * OAuth 2.0令牌在这里* /
但正确的是:授权:OAuth / * OAuth 2.0令牌在这里* /
是的!包括" OATH"在您的令牌密钥之前!
如果您使用的是cURL(PHP),请使用:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth '.$_SESSION['access_token'], 'Content-Type: application/json'));