javascript中的Twitter OAuth身份验证
Twitter OAuth authentication in javascript
我到处寻找一个JQuery ajax调用的好例子,使用Twitter的OAuth方法验证使用。我多次阅读说明,这就是我到目前为止所拥有的,目前我只是试图让Oauth_Token发送用户进行验证。我一直得到错误401未授权错误。我尝试了一些改变数据类型和ajax调用中的其他一些东西的组合,但没有成功。我相信"创建基本签名和创建SHA1加密签名"是正确的,但我可能错了。如果有人在javascript中成功实现twitter OAuth,请让我知道如何。我对使用第三方API也不感兴趣,实际上我想学习这个。谢谢你的帮助。
推特说明http://dev.twitter.com/pages/auth
My code (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的目的是让用户授权应用程序访问其数据。不能以编程方式发出请求令牌和访问令牌。请求令牌必须由用户通过他的浏览器在不同的流上授权,然后才能交换它并获得访问令牌。
相关文章:
- 使用$http.get()-OAuth身份验证下载带有Angular的远程文件
- 使用 Google OAuth 2.0 进行客户端身份验证不起作用
- 没有OAuth/localStorage的身份验证解决方案
- OAuth流通过电话间隙和服务器端对用户进行身份验证
- 使用 Angular.js 处理基于 OAuth 令牌的身份验证
- 使用来自前端的 Oauth 密码流进行身份验证
- 像Facebook一样的OAuth身份验证
- iOS 8 在 OAuth 的 401 上显示基本身份验证的弹出窗口
- 使用 OAuth 对 JavaScript 应用程序进行身份验证
- 持久性 Firebase OAuth 身份验证
- ZenDesk应用程序OAuth基于浏览器的身份验证
- 使用第三方Oauth提供程序对API的用户进行身份验证
- 如何使用Javascript获得的OAuth访问令牌进行PHP身份验证
- 雅虎身份验证通过OAuth没有任何重定向(客户端).这可能吗?
- 如何构建Twitter OAuth身份验证
- 如何使用API 1.1连接到Twitter,可能使用OAuth身份验证
- 使用Passport JS自定义策略Oauth身份验证
- Google OAuth -使用Javascript前端和服务器后端(授权代码流)进行身份验证
- 我如何在twitter API中使用OAuth身份验证
- 如何确定我在哪个会话上进行 Meteor 中的 OAuth 重新身份验证