如何通过firefox插件验证twitter

如何通过firefox插件验证twitter,twitter,firefox-addon,Twitter,Firefox Addon,Echofon在2013年4月左右放弃了他们的firefox twitter插件,但它一直保持着,直到最近对twitter API的一些更改打破了它 在正常使用中,应该遵循身份验证,但是请求返回“{”错误“:[{”代码“:32,“消息“:“无法对您进行身份验证。”}]}'status='401' 我认为问题出在功能上 我已经在dev.twitter.com上注册了一个新的应用程序,我使用的是来自该应用程序的消费者密钥,而不是存储库中的用户密钥 另外,我已经将oauth_callback属性添加到

Echofon在2013年4月左右放弃了他们的firefox twitter插件,但它一直保持着,直到最近对twitter API的一些更改打破了它

在正常使用中,应该遵循身份验证,但是请求返回“{”错误“:[{”代码“:32,“消息“:“无法对您进行身份验证。”}]}'status='401'

我认为问题出在功能上

我已经在dev.twitter.com上注册了一个新的应用程序,我使用的是来自该应用程序的消费者密钥,而不是存储库中的用户密钥

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


需要在授权标题中更改什么才能更正此问题?

此问题已解决。
关于如何在此处安装插件的补丁版本的说明-

在基于客户端浏览器的应用程序中使用消费者密钥和密码是非常不安全的。欢迎您这样做,但我肯定会在GitHub回购协议中提到这一点,严格来说,这是违反Twitter开发者政策的,因为您鼓励开发者为同一用例注册多个应用程序密钥。祝你好运
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(",");
}