[英]401 invalid credentials with oauth 2.0 google + api ,throwing apiServiceException..why so..?
[英]Annoying invalid credentials with oauth 2.0 google + api
我正在嘗試在我的網站上使用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
使用谷歌的請求代碼請求訪問令牌。 readFile
從谷歌獲取json響應。 這是一個由php生成的示例uri,插入到readFile中:
請幫忙?
您不應該共享一個未經改動的訪問令牌 - 有人可以使用它來冒充您(實際上是為了授予您的任何人)。
將Auth令牌作為標題傳遞也更好,例如:
curl -H "Authorization: OAuth ya29.xyzxyz" "https://www.googleapis.com/plus/v1/people/me"
不確定這是否必要,但您的錯誤消息似乎表明標題中存在auth錯誤,因此您可能提供的Authorization標頭與您需要的標頭不匹配。
這是一個使用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);
您是否嘗試過其中一個Google API客戶端? 您可以使用起動器應用程序來進行滾動。
我已經得到相同的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}
: https://www.googleapis.com/plus/v1/people/108189587050871927619?key={your_api_key}
我以前遇到過這個問題,但有推特。
對於OAuth,實際上我們與Twitter進行了兩次通信,首先獲取請求令牌,然后授權發送已簽名的第一個令牌。 也許你只是克服了第一個。
對我來說問題是GET / POST請求上的標題“授權”:
谷歌文檔說:授權:/ * 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'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.