使用REST API进行Twitter身份验证

时间:2013-06-06 17:45:13

标签: javascript node.js twitter twitter-oauth

在尝试获取请求令牌时,我正在回复身体“无法验证oauth签名和令牌”。

这是我用来设置所有请求参数的代码。我注意到一些感兴趣的地方,我认为这可能是一堆星号的问题。

var appId = "myId"
  , appSecret = "mySecret"
  , redirectUrl = "http://localhost:8077/twitterLogin";

var d = new Date();
  , time = Math.floor(d.getTime() / 1000); //seconds since epoch

var oauth_nonce = Math.random() * 1000000; //************could be the issue, maybe?
  , oauth_callback = encodeURIComponent('http://localhost:8077/twitterLogin');

//****************more likely the issue
var paramString = encodeURIComponent('oauth_consumer_key=**MY_APP_ID**&oauth_callback='+ oauth_callback 
                                      + '&oauth_nonce=' + oauth_nonce 
                                      + '&oauth_signature_method=HMAC-SHA1&oauth_timestamp=' + time 
                                      + '&=oauth_version=1.0');
var baseString = "POST&" + encodeURIComponent("https://api.twitter.com/oauth/request_token") + '&' + paramString; 

var signingKey = encodeURIComponent(appSecret) + '&' + encodeURIComponent(appSecret);
  , signature = crypto.createHmac('sha1', signingKey).update(baseString).digest('hex');

这是请求本身的代码:

var requestBody = "oauth_callback="+ oauth_callback 
                + "&appId=" + appId
                + "&oauth_nonce=" + oauth_nonce 
                + "&oauth_signature=" + signature 
                + "&oauth_signature_method=HMAC-SHA1"
                + "&oauth_timestamp=" + time
                + "&oauth_version=1.0";
//*******also could be the issue. maybe missing headers or something?
request.post({url: 'https://api.twitter.com/oauth/request_token', body: requestBody}); 

我只是想知道签名或令牌中我缺少什么......

1 个答案:

答案 0 :(得分:1)

  • 首先,您的参数必须以lexigraphically方式排序 (按字母顺序)在编码之前,你需要切换 oauth_callback和oauth_consumer_key的位置。

  • 其次,对于 未经授权的请求令牌,您使用您的计算签名密钥 消费者秘密附加'&'字符。你有附加 这个秘密是在&符之后的第二次。

  • 第三,在您的请求中 你应该使用oauth_consumer代替appId作为名称 你的参数。

尝试这些修补程序,看看它是否有效。