簡體   English   中英

使用oauth 2.0 google + api煩人的無效憑據

[英]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秒內谷歌的請求。 這是我正在使用的過程:

  1. 讓用戶授權請求。
  2. 從谷歌獲取請求代碼。
  3. 使用cUrl使用谷歌的請求代碼請求訪問令牌。
  4. 將訪問代碼放入php會話。
  5. 重定向回主頁面。
  6. 主頁檢測到會話變量已設置且不顯示登錄鏈接。
  7. 主頁上的Php使用readFile從谷歌獲取json響應。
  8. Google會返回無效憑據。

這是一個由php生成的示例uri,插入到readFile中:

https://www.googleapis.com/plus/v1/people/me?prettyprint=true&access_token=ya29.AHES6ZQRGovDa5FHsojU3qCM1DEnYmJPywz1muUE4CWGH5n70OcAkw

請幫忙?

您不應該共享一個未經改動的訪問令牌 - 有人可以使用它來冒充您(實際上是為了授予您的任何人)。

將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客戶端? 您可以使用起動器應用程序來進行滾動。

https://developers.google.com/+/downloads

我已經得到相同的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM