0

我有一个与 Fitbit 一起使用的 OAuth 实现,以从 fitbit 的服务中提取数据。但是他们最近更新了他们的服务,现在每当我尝试获取访问令牌时请求都会失败。

他们就新要求发表了以下声明:

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 设置签名以用于其请求的内容。任何帮助将不胜感激!!!

如果您需要更多信息,请告诉我!

4

1 回答 1

0

我发现了这个问题。

事实证明,我并没有保存oauth_token_secret被退回的东西,而是使用了消费者秘密。

一旦我更新了这个,这个过程就会按预期运行。

于 2014-02-07T21:27:27.780 回答