首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在javascript中为访问令牌生成oauth1签名?

如何在javascript中为访问令牌生成oauth1签名?
EN

Stack Overflow用户
提问于 2015-10-17 03:27:39
回答 1查看 2.7K关注 0票数 4

我是etrade oauth集成的最后一块--(即发送访问令牌的GET请求)。这个oauth发生在meteor.js环境中,所以所有代码都是用javascript编写的。

目前,我从etrade得到了一个401Error- 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,我编写了以下代码:

代码语言:javascript
复制
   var signature       = encodeURI(secretKey)
   signature           = signature + "&" + encodeURI(contentArr.oauth_token_secret);
   hmacSignature       = Crypto.createHmac('sha1', signature);
   hmacHash            = hmacSignature.digest('hex');

hmacHash是我作为访问令牌get请求的oauth_signature参数传递的变量,但没有go :/仍然得到signature_invalid错误消息。有什么建议吗?显然,如果你给我一个好的答案,我会将其标记为已接受。

提前谢谢。:)

EN

回答 1

Stack Overflow用户

发布于 2019-03-13 08:08:02

我只是设法让它工作了!

代码语言:javascript
复制
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, ",");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33178211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档