Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中为访问令牌生成oauth1签名?_Javascript_Meteor_Oauth_Etrade Api - Fatal编程技术网

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

如何在javascript中为访问令牌生成oauth1签名?,javascript,meteor,oauth,etrade-api,Javascript,Meteor,Oauth,Etrade Api,我是etrade oauth集成的最后一部分(即发送获取访问令牌的请求)。此oauth是在meteor.js环境中进行的,因此所有代码都是用javascript编写的 目前我从etrade收到一个401错误-oauth_problem=signature_无效响应。经过大量的科学研究,根据大平均定律,部分因为我是个天才,我得出结论,我有一个无效的签名 使用这篇wikipedia文章(node.js部分)和oauth文档,我编写了以下代码: var signature = enc

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

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

使用这篇wikipedia文章(node.js部分)和oauth文档,我编写了以下代码:

   var signature       = encodeURI(secretKey)
   signature           = signature + "&" + encodeURI(contentArr.oauth_token_secret);
   hmacSignature       = Crypto.createHmac('sha1', signature);
   hmacHash            = hmacSignature.digest('hex');
hmacHash是作为oauth_签名参数传递给我的访问令牌get请求的变量,但不允许:/Still get the 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, ",");
}

谢谢你。你能用一个端到端的例子来分享一个要点吗?你能分享
objectToQuotedParams
?我想它应该是这样的:
const objectToQuotedParams=(对象,分隔符)=>object.keys(object.map((key)=>(key+“=”+String(object[key])。join(delimeter)