【问题标题】:How can I send properly an oauth 1.0 request to verify credentials with nodejs如何正确发送 oauth 1.0 请求以使用 nodejs 验证凭据
【发布时间】:2015-12-29 08:34:36
【问题描述】:

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

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 - {"errors":[{"code":32,"message":"无法验证您的身份。"}

第一次尝试是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));
  });

【问题讨论】:

    标签: node.js oauth twitter-oauth


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您不需要验证凭据的秘密dev.twitter.com/rest/reference/get/account/verify_credentials 有一个演示,您可以在其中获得从官方推特页面生成的 curl 命令,并在我的命令提示符下工作。同样在第二个示例中,我使用了消费者和用户的秘密。
    • 您是否尝试过我的解决方案?我知道答案,因为它对我有用。秘密用于计算签名。另外我强烈建议您使用 request 而不是 node-oauth。
    • 我会接受你的回答,我没有意识到秘密用于计算签名但不存在于 curl 命令中,谢谢。第二个示例不起作用,因为 twitter 检索到的 access_token 具有 token:secret@consumer_key 形式,而我没有删除 @
    • 如果您对 OAuth 规范在请求中的具体实现方式感到好奇,请查看 here(注意其中的秘密被删除,它们仅用于签署请求)。
    猜你喜欢
    • 2019-05-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2022-12-16
    • 2010-11-11
    • 2018-04-12
    • 2020-11-13
    相关资源
    最近更新 更多