【发布时间】:2018-03-26 15:36:04
【问题描述】:
我正在尝试转换此处找到的 C# 代码: AMX Authorization Header 以连接到外部 API。 C# 代码在尝试连接到外部 API 时有效,但当我将其转换为 nodeJS 解决方案时它不起作用。
我无权访问外部 C# API,因此无法更新该方面,但希望有人可以查看此内容并看到我遗漏或做错的事情:
我的nodejs解决方案:
var request = require('request');
var uuid = require('node-uuid');
var CryptoJS = require('crypto-js');
var URL = "https://urltoexternalAPI.com";
var itemAPPId = "testAPPId";
var APIKey = "testAPIKey";
var requestUri = encodeURIComponent(URL.toLowerCase());
var requestHttpMethod = "GET";
var requestTimeStamp = Math.floor(new Date().getTime() / 1000).toString();
var nonce = uuid.v1().replace(/-/g, '');
//I excluded the content hashing part as the API Im hitting is a GET request with no body content
var signatureRawData = itemAPPId + requestHttpMethod + requestUri + requestTimeStamp + nonce;
var secretKeyByteArray = CryptoJS.enc.Base64.parse(APIKey);
var signature = CryptoJS.enc.Utf8.parse(signatureRawData);
var signatureBytes = CryptoJS.HmacSHA256(signature, secretKeyByteArray);
var requestSignatureBase64String = signatureBytes.toString(CryptoJS.enc.Base64);
request({
url: URL,
headers: {
'Authorization': "amx "+itemAPPId+":"+requestSignatureBase64String+":"+nonce+":"+requestTimeStamp
}
}, function (error, response, body) {
if (response.statusCode != 200) {
console.log("Fail");
} else {
console.log("Success");
}
});
【问题讨论】:
-
你见过这个问题吗:stackoverflow.com/questions/7480158 ?
-
@Yoryo 我已经尝试过该解决方案,但它仍然返回未经授权的 401。我不知道这是否与他们解码它的方式有关,但我真的不希望有一个 c# 处理程序只是为了向外部 API 运行一个请求。我使用了您链接的问题的答案,如下所示:
var requestSignatureBase64String = crypto.createHmac('sha256', APIKey).update(signatureRawData).digest('hex');
标签: javascript c# node.js hmac