2014-01-30 51 views
0

我有一個OAuth實現與Fitbit合作從fitbit的服務中提取數據。然而,他們最近更新了他們的服務,現在只要我嘗試獲取訪問令牌,請求就會失敗。使用PHP Pecl - Custom Signature(Fitbit)實現OAuth 1.0a

他們已經發表聲明如下有關新規定:

The solution is to OAuth sign the requests to <https://api.fitbit.com/oauth/request_token> and <https://api.fitbit.com/oauth/access_token> in a similar manner that all other calls to the Fitbit API are signed. 

Requests to <https://api.fitbit.com/oauth/request_token> need to be signed with your application's consumer key and secret. 
Requests to <https://api.fitbit.com/oauth/access_token> need to be signed with your application's consumer key and secret and the oauth_token and oauth_verifier received from the authorization callback. 

我使用PHP PECL的OAuth庫的OAuth請求。不過,我找不到添加額外參數到簽名的方法。我想下面的,但我不知道這是更新的OAuth簽名的正確方法:

$params['consumer_key'] = $this->consumer_key; 
$params['consumer_secret'] = $this->consumer_secret; 
$params['oauth_token'] = $this->oauth_token; 
$params['oauth_verifier'] = $_REQUEST['oauth_verifier']; 

$this->signature = $this->oauth->generateSignature('GET', $this->access_url, $params); 
$this->access_token = $this->oauth->getAccessToken($this->access_url, $this->signature, $_REQUEST['oauth_verifier']); 

的OAuth的錯誤我得到的是:

401 
Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect) 
oauthoauth_signatureInvalid signature: FfvYDv5MSOfwcOwLZBJa0TlKS4Q=false 

這是從存儲簽名上面的代碼示出了適當的簽名應該是:

[signature] => wlfzqPs4aEkTkHfqyaO65D/RW6o= 

這是「接頭已發送」片的調試信息:

[headers_sent] => Authorization: OAuth oauth_session_handle="Frdnxw8oHe3BgNVi0Fy4jBXrZko%3D", 
oauth_verifier="ss6nmke8elf3so66jg3auued49", 
oauth_consumer_key="(my key)", 
oauth_signature_method="HMAC-SHA1", 
oauth_nonce="30463910852ea5cc2d04e60.71895372", 
oauth_timestamp="1391090882", 
oauth_version="1.0", 
oauth_token="2cabd6beab341e332bdf8e522b6019ef", 
oauth_signature="hULwWcQOl%2F8aYjh0YjR843iVXtA%3D" 

我無法在文檔中找到任何說明如何設置OAuth的簽名以便與其請求一起使用的文檔。任何幫助將不勝感激!!!

如果您需要更多信息,請讓我知道!

回答

0

我發現了這個問題。

事實證明,我並沒有保存oauth_token_secret被交還,而是使用了消費者的祕密。

一旦我更新了這個,該過程按預期運行。