javascript - 如何在javascript中为访问 token 生成oauth1签名?

标签 javascript meteor oauth etrade-api

我是 etrade oauth 集成的最后一部分-(即发送访问 token 的 GET 请求。)此 oauth 发生在meteor.js 环境中,因此所有代码都是用 javascript 编写的。

目前我收到 401 错误 - 来自 etrade 的 oauth_problem=signature_invalid 响应。经过大量的科学研究,根据大平均定律,部分是因为我是个天才,我得出的结论是我的签名无效。

使用这篇维基百科文章 https://en.wikipedia.org/wiki/Hash-based_message_authentication_code (node.js 部分)和这个 oauth 文档 https://dev.twitter.com/oauth/overview/creating-signatures我写了以下代码:

   var signature       = encodeURI(secretKey)
   signature           = signature + "&" + encodeURI(contentArr.oauth_token_secret);
   hmacSignature       = Crypto.createHmac('sha1', signature);
   hmacHash            = hmacSignature.digest('hex');

hmacHash 是我作为访问 token 获取请求的 oauth_signature 参数传递的变量,但没有执行:/仍然收到 signature_invalid 错误消息。有什么建议 ???显然,如果您给我一个好的答案,我会将其标记为已接受。

提前致谢。 :)

最佳答案

刚刚设法让这个工作!

let accountId = "";
let consumerKey = "";
let consumerSecret = "";
let tokenId = "";
let tokenSecret = "";

function generateOAuthHeader(auth, method, port, hostname, path, params){

let signatureParams = [];

for (let key in params){
    signatureParams.push((`${key}=${params[key]}`));
}

for (let key in auth){
    signatureParams.push((`${key}=${auth[key]}`));
}

signatureParams = signatureParams.sort();

let parameterString = signatureParams.join("&");

console.log("parameterString", parameterString);

let baseUrl = encodeURIComponent(`${port === 80 ? "http://" : "https://"}${hostname}${path}`);

console.log("baseUrl", baseUrl);

let baseString = `${method}&${baseUrl}&${encodeURIComponent(parameterString)}`;

console.log("baseString", baseString);

let encodeKey = `${consumerSecret}&${tokenSecret}`;

console.log("encodeKey", encodeKey);

let signature = crypto.createHmac('sha1', encodeKey).update(baseString).digest('base64');

console.log("signature", signature);

auth.realm = accountId; //Only if required
auth.oauth_signature = (signature);

return `OAuth `+objectToQuotedParams(auth, ",");
}

关于javascript - 如何在javascript中为访问 token 生成oauth1签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33178211/

相关文章:

javascript - 在 mvc3 中更改 @Html.TextboxFor 的 onchange 事件的标签文本

javascript - Meteor wrapAsync/Node Fiber Future 不工作

python - 为什么 Python Requests 在尝试将它与 Tumblr 一起使用时会抛出此错误?

node.js - 使用 OAuth 通过 REST API 从 Magento 到 NodeJS

android - OAuth推特获取request_token {"errors":[ {"code":32 ,"message" :"Could not authenticate you."}]}

javascript - Webrtc为什么ontrack从不调用调用者?

javascript - 为什么我无法让这段 javascript 代码工作?

javascript - 在没有评估或复制和粘贴的情况下调度选择元素

javascript - 登录后根据配置文件参数路由用户

javascript - 链接到 Meteor.js 和 Telescope 中公共(public)文件夹中的 Assets