2011-07-14 26 views
5

He buscado en todos lados un buen ejemplo de una llamada JQuery ajax para autenticar un uso en Twitter utilizando su método OAuth. Leí las instrucciones varias veces y esto es lo que tengo hasta ahora, en este momento solo intento que el Oauth_Token envíe al usuario para que lo valide. Sigo recibiendo el error 401 error no autorizado. He intentado algunas combinaciones cambiando el tipo de datos y otras cosas en la llamada ajax pero sin éxito. Creo que el "Crear firma base y Crear firma a partir de encriptación SHA1" es correcto, pero podría estar equivocado. Si alguien ha implementado twitter OAuth en javascript, házmelo saber cómo. Tampoco estoy interesado en utilizar una API de terceros, de hecho, quiero aprender esto. Gracias de antemano por cualquier ayuda.Twitter OAuth autenticación en javascript

instrucciones de Twitter http://dev.twitter.com/pages/auth

Mi código (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"); 
     } 

Aquí está la respuesta 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

¿Alguna vez encontró una solución? Estoy teniendo el mismo problema en este momento, sería bueno si fuera posible. – Gus

Respuesta

3

que tenía exactamente el mismo problema. Después de perder unas cuantas horas a la página de desarrolladores de Twitter me encontré con esto:

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

Básicamente no se puede obtener la oauth_token esta manera en el lado del cliente. Es por eso que siempre obtienes el error 401.

Hay una solución para evitar que el lado del servidor use el 'xauth' (https://dev.twitter.com/docs/oauth/xauth), pero para hacerlo necesitas envíe un mensaje detallado a [email protected] para solicitar privilegios xAuth.

0

El objetivo de 3-leggedo OAuth es conseguir que el usuario autorice el acceso de su aplicación a sus datos. No puede emitir programáticamente un token de solicitud y un token de acceso. El token de solicitud debe ser autorizado por el usuario a través de su navegador en un flujo diferente antes de que pueda intercambiarlo y obtener un token de acceso.

Cuestiones relacionadas