javascript中的Twitter OAuth身份validation

我到处寻找一个JQuery ajax调用的好例子,用于使用他们的OAuth方法在Twitter上validation用法。 我多次阅读说明书,这是我到目前为止所做的,目前我只是试图让Oauth_Token让用户进行validation。 我一直收到错误401未经授权的错误。 我尝试了一些改变dataType的组合,并在ajax调用中结合其他东西,但没有成功。 我相信“创建基本签名和SHA1加密创建签名”是正确的,但我可能是错的。 如果有人在javascript中成功实现了Twitter OAuth,请告诉我如何操作。 我对使用第三方API也不感兴趣,实际上我想学习这个。 在此先感谢您的帮助。

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 

我有完全相同的问题。 在twitter开发者页面上丢失了几个小时后,我发现了这个:

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

基本上你不能在客户端以这种方式获得oauth_token。 这就是为什么你总是得到错误401。

有一个解决方案可以避免服务器端使用’xauth’(https://dev.twitter.com/docs/oauth/xauth),但为此,您需要向api@twitter.com发送详细消息以请求xAuth特权。

3-leggedo OAuth的目的是让用户授权您的应用程序访问他的数据。 您不能以编程方式发出请求令牌和访问令牌。 请求令牌必须由用户通过其浏览器在不同的流上授权,然后才能进行交换并获得访问令牌。