【发布时间】: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