【问题标题】:How to authenticate with twitter from a firefox plugin如何通过 Firefox 插件使用 twitter 进行身份验证
【发布时间】:2020-02-05 01:11:42
【问题描述】:

Echofon 在 2013 年 4 月左右放弃了他们的 firefox twitter 插件,但它一直在 github 上维护,直到最近对 twitter API 的一些更改破坏了它。

在正常使用中,身份验证应遵循PIN-based authentication,但对https://api.twitter.com/oauth/request_token 的请求却返回“{"errors":[{"code":32,"message":"Could not authenticate you."} ]}'" 状态='401'

我认为问题出在TwitterClient.buildOAuthHeader 函数中

TwitterClient.buildOAuthHeader = function (user, method, url, param)
{
  var ts = Math.ceil(Date.now() / 1000);
  var diff = EchofonUtils.timestampDiff();
  if (diff != 0) {
    EchofonUtils.debug("local timestamp " + ts + " / server timetsamp " + (ts + diff));
    ts += diff;
  }

  var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
  converter.charset = "UTF-8";
  var result = {};
  var data = converter.convertToByteArray(user + Date.now() + url + Math.random(), result);
  var ch = Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
  ch.init(ch.MD5);
  ch.update(data, data.length);
  var hash = ch.finish(false);

  var s = convertToHexString(hash);

  var oauthparam = {"oauth_consumer_key"     : OAUTH_CONSUMER_KEY,
            "oauth_timestamp"        : ts,
            "oauth_signature_method" : "HMAC-SHA1",
            "oauth_nonce"            : s + Math.random(),
            "oauth_version"          : "1.0"};

  if (user.oauth_token) {
    oauthparam["oauth_token"] = EchofonAccountManager.instance().get(user.user_id).oauth_token;
  }

  var dict = {};
  for (var key in param) dict[key] = param[key];
  for (var key in oauthparam) dict[key] = oauthparam[key];

  var paramStr = encodeURLParameter(dict);

  var base = [method, RFCEncoding(url), RFCEncoding(paramStr)].join("&");

  var signature;
  var secret = user.oauth_token_secret ? EchofonAccountManager.instance().get(user.user_id).oauth_token_secret : "";
  var signature = EchofonSign.OAuthSignature(base, secret);

  oauthparam['oauth_signature'] = signature;

  var headers = [];
  for (var key in oauthparam) {
    headers.push(key + '="' + RFCEncoding(oauthparam[key]) + '"');
  }
  headers.sort();

  return headers.join(",");
}

我在 dev.twitter.com 上注册了一个新应用程序,我正在使用其中的使用者密钥,而不是存储库中的那个。

此外,我已将 oauth_callback 属性添加到 oauthparam 对象,并将值设置为“oob”,如上面基于 PIN 的身份验证链接中所述,但插件未使用 API 正确进行身份验证.

需要在授权标头中进行哪些更改才能更正此问题?

【问题讨论】:

    标签: twitter firefox-addon


    【解决方案1】:

    此问题已解决。 有关如何在此处安装插件补丁版本的说明 - https://github.com/echofox-team/echofon-firefox-unofficial/issues/85#issuecomment-581843812

    【讨论】:

    • 在基于客户端浏览器的应用程序中使用消费者密钥和机密是非常不安全的。欢迎您这样做,但我肯定会在 GitHub 存储库中提及这一点,严格来说,这违反了 Twitter 开发人员政策,因为您鼓励开发人员为同一个用例注册多个应用程序密钥。祝你好运!
    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2011-05-03
    • 2018-05-03
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多