0

Fitbit と連携して Fitbit のサービスからデータを取得する OAuth を実装しました。ただし、最近サービスを更新したため、アクセストークンを取得しようとするとリクエストが失敗します。

彼らは、新しい要件について次の声明を発表しました。

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. 

OAuth リクエストに PHP PECL 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」部分です。

[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 に答える