2012-01-24 12 views
0

RSSフィードから取得した新しいアイテムに基づいてTumblrに自動的に新しい投稿を追加するための素早く汚れたアプリをまとめています。このアプリはCodeigniterにあり、これまでは要求資格情報を取得してユーザーをTumblrに送って承認を求めました。ここでCodeigniterを使用してOAuthアクセスの資格情報を要求するときにエラーが発生する

Message: file_get_contents(http://www.tumblr.com/oauth/access_token?oauth_consumer_key=THECONSUMERKEY&oauth_nonce=9362afdd34f9ce1601fb9cf505ffa3cf&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1327440390&oauth_token=09mFsxCvsODDmSxPCyQNu4QKFMMXaAEEyPtBibPUyUTE1n2BsJ&oauth_verifier=hDfGgesf9EKIO5yFhiHxtnsbP42XEP1FISY2qyyWerzXf6fPTG&oauth_version=1.0&oauth_signature=yeFw8ACvVvKtD%2BQ%2FdzbLivDSm1Y%3D) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized 

は、私が使用しているコードです:

$oauthVerifier = $_GET["oauth_verifier"]; 
     $sigBase = "GET&" . rawurlencode($this->accessTokenUrl) . "&" 
       . rawurlencode("oauth_consumer_key=" . rawurlencode($this->consumerKey) 
         . "&oauth_nonce=" . rawurlencode($this->nonce) 
         . "&oauth_signature_method=" . rawurlencode($this->oauthSignatureMethod) 
         . "&oauth_timestamp=" . $this->oauthTimestamp 
         . "&oauth_token=" . rawurlencode($this->CI->session->userdata('requestToken')) 
         . "&oauth_verifier=" . rawurlencode($oauthVerifier) 
         . "&oauth_version=" . $this->oauthVersion); 
     $sigKey = $this->consumerSecret . "&"; 
     $oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true)); 

     $requestUrl = $this->accessTokenUrl . "?" 
       . "oauth_consumer_key=" . rawurlencode($this->consumerKey) 
       . "&oauth_nonce=" . rawurlencode($this->nonce) 
       . "&oauth_signature_method=" . rawurlencode($this->oauthSignatureMethod) 
       . "&oauth_timestamp=" . rawurlencode($this->oauthTimestamp) 
       . "&oauth_token=" . rawurlencode($this->CI->session->userdata('requestToken')) 
       . "&oauth_verifier=" . rawurlencode($oauthVerifier) 
       . "&oauth_version=" . rawurlencode($this->oauthVersion) 
       . "&oauth_signature=" . rawurlencode($oauthSig); 

     $response = file_get_contents($requestUrl); 
彼らが戻ってアプリにリダイレクトしていると私はアクセス証明書を要求する、私は次のエラーを取得していたら問題は、あります

明るいアイデアですか?

答えて

0

UPDATE:ストレイアンパサンドは実際には元のコードではありませんでしたが、後でそれを修正しようとしたときに何かしました。実際、元の問題の原因は、署名鍵にRequest Token Secretが存在しないことでした。

ポインタのおかげで、aitchnyu - 最終的には、問題は浮動小数点のアンパサンドでした。署名ベースでは、 "oauth_consumer_key ="の前にアンパサンドをラップしていました。

"GET&" . rawurlencode($this->accessTokenUrl) 
       . rawurlencode("&oauth_consumer_key=" . rawurlencode($this->consumerKey) 
         . "&oauth_nonce=" . rawurlencode($this->nonce) 
         . "&oauth_signature_method=" . rawurlencode($this->oauthSignatureMethod) 
         . "&oauth_timestamp=" . rawurlencode($this->time) 
         . "&oauth_token=" . rawurlencode($token) 
         . "&oauth_verifier=" . rawurlencode($oauthVerifier) 
         . "&oauth_version=" . $this->oauthVersion); 

新しい1:

"GET&" . rawurlencode($this->accessTokenUrl) . "&" 
       . rawurlencode("oauth_consumer_key=" . rawurlencode($this->consumerKey) 
         . "&oauth_nonce=" . rawurlencode($this->nonce) 
         . "&oauth_signature_method=" . rawurlencode($this->oauthSignatureMethod) 
         . "&oauth_timestamp=" . rawurlencode($this->time) 
         . "&oauth_token=" . rawurlencode($token) 
         . "&oauth_verifier=" . rawurlencode($oauthVerifier) 
         . "&oauth_version=" . $this->oauthVersion); 

バイタル違い

はここで古いSIGベースです!

+0

そして、私はあなたがリクエストトークンを取得するコードでそのミスをしたことはないと信じています。私が言ったとき、 "コンシューマキーはあなたにリクエストトークンを正常に手に入れました"と私はあなたが誤ってそれを突き抜けたと仮定しませんでした。 – aitchnyu

1

これは不完全で、あなたが追いかけるいくつかのバグを必要とします。

は、会話の関連部分を理解しています:

ここ
TumApp to user: please go to Tumblr with one of my request tokens: GHF3F4F 

user to Tumblr: I authorize TumApp, and here is it's request token: GHF3F4F 

Tumblr to itself: let me authorize GHF3F4F, which TumApp can exchange for an access token 
     to user: redirect to Tumapp's callback 

Tumapp to itself: Great, user authorized me (by requesting my callback). Let me exchange my request token for an access token 
     to Tumblr: Hey, give me an access token for GHF3F4F 

Tumblr to Tumapp: Epic 401 fail! 

は、Tumblrのは、私が開始推測うhttp://oauth.net/core/1.0a/#http_codes

HTTP 401 Unauthorized 
    Invalid Consumer Key 
    Invalid/expired Token 
    Invalid signature 
    Invalid/used nonce 

から401

を与えるだろう理由ですトークンと一緒に。コンシューマーキーが正常に要求トークンを取得し、署名とノンスがライブラリーによって生成されます。

関連する問題