如何正确发送oauth 1.0请求以验证nodejs的凭据

时间:2015-10-01 10:16:22

标签: node.js oauth twitter-oauth

我有一个问题,我正在尝试调试,我希望得到一些帮助。

curl命令中的oauthToken变量和oauth_token以及使用者密钥是相同的。

此curl命令有效:

curl --get 'https://api.twitter.com/1.1/account/verify_crn: OAuth oauth_consumer_key="dv5trHvHDrAjIM87Z3KGtJrq5", oauth_nonce="7aec4b5b37ab420d44717387e2f889be", oauth_signature="qm4i0jGOPbbmYkaOFCoJhOfgcd4%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1443690396", oauth_token="71611055-pzDi5UJQXKzdP4kBLceLLwuzel8DKiRjNivlmkCuA", oauth_version="1.0"' --verbose

以下两个人并没有他们认为相同的参数。他们回来了

  

401 - {"错误":[{"代码":32,"消息":"无法对您进行身份验证。" }

首先尝试使用https://www.npmjs.com/package/request#oauth-signing

      const oauth={
        consumer_key:config.get('twitter.consumerKey'),
        token:oauthToken,
      }
      console.log(oauth);

      requestAsync({
        url:'https://api.twitter.com/1.1/account/verify_credentials.json',
        method:'GET',
        oauth,
      })

第二次尝试是https://github.com/ciaranj/node-oauth

  const oauthToken=req.body.accessToken.split(':')[0];
  const oauthTokenSecret=req.body.accessToken.split(':')[1];
  console.log(oauthToken+" " + oauthTokenSecret);
  const oauth = new OAuth.OAuth(
    'https://api.twitter.com/oauth/request_token',
    'https://api.twitter.com/oauth/access_token',
    config.get('twitter.consumerKey'),
    config.get('twitter.consumerSecret'),
    '1.0A',
    null,
    'HMAC-SHA1'
  );

  oauth.get(
  'https://api.twitter.com/1.1/account/verify_credentials.json',
  oauthToken,
  oauthTokenSecret,
  function (e, data, res){
    if (e) console.error(e);
    console.log(require('util').inspect(data));
  });

1 个答案:

答案 0 :(得分:2)

request docs中所述,您必须提供4个必需的OAuth参数:

request({
  oauth: {
    consumer_key: '...',
    consumer_secret: '...',
    token: '...',
    token_secret: '...'
  }
})

您可以从OAuth应用程序的设置页面获取consumer_keyconsumer_secret。用户tokentoken_secret可以通过执行OAuth流程获得。

您可以使用Grant获取用户的凭据。您可以查看Twitter的OAuth流程如何here