2011-07-14 13 views
5

OAuthメソッドを使用してTwitterでの使用を認証するためのJQuery ajax呼び出しの良い例はどこからでも見てきました。私は指示を何度も読んでいますが、これは私がこれまでに持っていたものです。瞬間にOauth_Tokenにユーザーを送信させて検証させようとしています。私はエラー401不正なエラーを取得し続けています。私はデータ型を変更し、ajax呼び出しで他のものを結合するいくつかの組み合わせを試みましたが、成功はありません。私は、 "SHA1暗号化からのベース署名と署名の作成"は正しいと信じていますが、間違っている可能性があります。誰かがJavaScriptのTwitterのOAuthを実装している場合は、どうか教えてください。私はサードパーティのAPIを使用することにも興味はないので、実際にこれを学びたいと思っています。助けを前にありがとう。Twitter javascriptのOAuth認証

Twitterの指示http://dev.twitter.com/pages/auth

ここでは私のコード(Javascriptの)

//Unix time 
    var foo = new Date; // Generic JS date object 
    var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch 
    var unixtime = parseInt(unixtime_ms/1000); 

    var callBackURL = "oob"; //oob for now 
    var nonce = "12342897"; 

    //Create Signature Base String using formula 
    var baseSign = "POST" + "&" + encodeURIComponent("https://api.twitter.com/oauth/request_token").toString() + "&" 
    + encodeURIComponent("oauth_callback") + "%3D" + encodeURIComponent(callBackURL) 
    + "%26" 
    + encodeURIComponent("oauth_consumer_key") + "%3D" + encodeURIComponent("*****consumer key**********") 
    + "%26" 
    + encodeURIComponent("oauth_nonce") + "%3D" + encodeURIComponent(nonce) 
    + "%26" 
    + encodeURIComponent("oauth_signature_method") + "%3D" + encodeURIComponent("HMAC-SHA1") 
    + "%26" 
    + encodeURIComponent("oauth_timestamp") + "%3D" + encodeURIComponent(unixtime) 
    + "%26" 
    + encodeURIComponent("oauth_version") + "%3D" + encodeURIComponent("1.0"); 

    //Create Signature, With consumer Secret key we sign the signature base string 
    var signature = b64_hmac_sha1("********secrete key****************", baseSign); 

    //Build headers from signature 
    var jsonData = JSON.stringify({ 
     Authorization: { 
      oauth_nonce: nonce, 
      oauth_callback: encodeURIComponent(callBackURL), 
      oauth_signature_method: "HMAC-SHA1", 
      oauth_timestamp: unixtime, 
      oauth_consumer_key: "**********consumer key*********", 
      oauth_signature: signature, 
      oauth_version: "1.0" 
     } 
    }); 

    //Request Access Token 
    $.ajax({ 
     url: "http://api.twitter.com/oauth/request_token", 
     type: "post", 
     headers: jsonData, 
     dataType: "jsonp", 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (data) { 
      alert("Error"); 
     } 

は、私はまったく同じ問題があったHTTPレスポンス

HTTP/1.1 401 Unauthorized 
Date: Thu, 14 Jul 2011 21:05:55 GMT 
Server: hi 
Status: 401 Unauthorized 
X-Transaction: 1310677555-60750-49846 
X-Frame-Options: SAMEORIGIN 
Last-Modified: Thu, 14 Jul 2011 21:05:55 GMT 
X-Runtime: 0.01152 
Content-Type: text/html; charset=utf-8 
Pragma: no-cache 
X-Revision: DEV 
Expires: Tue, 31 Mar 1981 05:00:00 GMT 
X-MID: ffc990286a86b688f1e72ef733365926ea30ca62 
Vary: Accept-Encoding 
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0, proxy-revalidate 
Content-Length: 44 
Proxy-Connection: Keep-Alive 
Connection: Keep-Alive 
Set-Cookie: lang=en; path=/ 
Set-Cookie: lang=en; path=/ 
Set-Cookie: _twitter_sess=BAh7DjoOcmV0dXJuX3RvIiJodHRwOi8vdHdpdHRlci5jb20vcGF1bF9pcmlz%250AaDoJdXNlcmkEl6phBDoVaW5fbmV3X3VzZXJfZmxvdzA6D2NyZWF0ZWRfYXRs%250AKwgE9BTnMAE6B2lkIiU2MzBkYmJmNmY4YmRmY2E3NGI2NDRmZTFhNjZiNmU2%250ANToTc2hvd19oZWxwX2xpbmswOgxjc3JmX2lkIiUyODIzYWNlNmFjMzQ3OTk5%250AZDE5YmVlYmJlYzM4MTg0ZSIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6%250ARmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoTcGFzc3dvcmRfdG9rZW4i%250ALThkY2NlMmE1OTI5OWJmM2VjNDI4YWRiOTE0YTRmYzVjYzQwN2FkMmM%253D--22a361f562df3aa6991b81fff6f486086ab71f0e; 
domain=.twitter.com; 
path=/; HttpOnly 
Proxy-support: Session-based-authentication 
Age: 0 

Failed to validate oauth signature and token 
+0

あなたは解決策を見つけましたか?私は今でも同じ問題を抱えています。もし可能ならばいいでしょう。 – Gus

答えて

3

です。

https://dev.twitter.com/discussions/3454

Basiclyあなたは、クライアント側でこのようoauth_tokenを取得することはできません:Twitterの開発者ページで数時間を失った後、私はこれを見つけました。そのため、常にエラー401が発生しています。

'xauth'(https://dev.twitter.com/docs/oauth/xauth)を使用してサーバー側を回避する方法がありますが、そうする必要がありますxAuth特権を要求する詳細なメッセージを[email protected]に送信してください。

0

3-leggedoAAuthの目的は、ユーザーが自分のデータへのアプリケーションのアクセスを許可するようにすることです。要求トークンとアクセストークンをプログラムで発行することはできません。リクエストトークンは、ユーザがブラウザを介して別のフローで承認してから、アクセストークンを取得してアクセストークンを取得する必要があります。

関連する問題