2011-07-14 13 views
5

Szukałem wszędzie dobrego przykładu wywołania ajax JQuery do uwierzytelnienia użycia na Twitterze przy użyciu ich metody OAuth. Przeczytałem instrukcje kilka razy i to jest to, co mam do tej pory, w tej chwili staram się tylko uzyskać Oauth_Token, aby wysłać użytkownika do sprawdzenia poprawności. Wciąż dostaję błąd 401 nieautoryzowany błąd. Próbowałem kilka kombinacji zmieniających dataType i kilka innych rzeczy w wywołaniu ajax, ale bez powodzenia. Uważam, że "Utwórz sygnaturę podstawową i Utwórz sygnaturę z szyfrowania SHA1" jest poprawna, ale mogę się mylić. Jeśli ktokolwiek ma zaimplementować twitter OAuth w javascriptie, proszę, daj mi znać. Nie jestem również zainteresowany korzystaniem z API strony trzeciej, tak naprawdę chcę się tego nauczyć. Z góry dziękuję za pomoc.Uwierzytelnianie OAuth na Twitterze w javascript

Twitter instrukcje http://dev.twitter.com/pages/auth

mojego kodu (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"); 
     } 

Oto odpowiedzi 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

Czy kiedykolwiek znalazłeś rozwiązanie? Mam teraz ten sam problem, byłoby miło, gdyby to było możliwe. – Gus

Odpowiedz

3

miałem dokładnie ten sam problem. Po stracić kilka godzin na stronie deweloperów twitter Znalazłem to:

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

Basicly nie można uzyskać oauth_token ten sposób po stronie klienta. Dlatego zawsze pojawia się błąd 401.

Istnieje rozwiązanie, aby uniknąć strony serwera za pomocą "xauth" (https://dev.twitter.com/docs/oauth/xauth), ale aby to zrobić, trzeba wyślij szczegółową wiadomość na [email protected], aby poprosić o uprawnienia xAuth.

0

Celem 3-legged OAuth jest uzyskanie zgody użytkownika na dostęp aplikacji do jego danych. Nie można programowo programować tokena żądania i tokena dostępu. Żeton żądania musi być autoryzowany przez użytkownika za pośrednictwem przeglądarki w innym strumieniu, zanim będzie można go wymienić i uzyskać token dostępu.

Powiązane problemy