我正在Angularjs中开发一个应用程序,该应用程序调用Tether.to站点(http://platform.tether.to/)的一些API。
API要求在此表单后发送标头:
Authorization: APIAuth TetherAPIKey:Signature
Authorization标头的计算方法如下:
Authorization = “APIAuth” + “ ” + TetherAPIKey + “:” + Signature;
Signature = Base64( HMAC-SHA1( TetherAPISecret, StringToSign ) );
StringToSign = Content-Type + “,” + Content-MD5 + “,” + URI + “,” + Timestamp;
我使用AngularJS中的以下代码实现:
var url, timestamp, stringToSign, signature, request, r,
apiKey = 'xxxxxxx', apiSecret = 'xxxxxxxPo95gm9eoCeFyTTw3zeCFf';
url = 'https://wallet.tether.to/api/v1/transactions';
timestamp = new Date().toUTCString();
stringToSign = 'application/json,' + CryptoJS.MD5('') + ',' + url + ',' + timestamp;
signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA1(stringToSign, apiSecret));
request = {
headers: { 'Authorization': 'APIAuth ' + apiKey + ':' + signature }
};
r = $http.get(url, request).success(function(data) {
console.log(data);
});
我的代码中的错误在哪里?为什么API(" / transactions")总是返回{"code":401,"error":"Unauthorized"}
?
答案 0 :(得分:0)
当您强制将WordArray转换为字符串时,CryptoJS默认编码为Hex,但table-cells
必须是Base 64编码(从项目的ruby代码判断)。
尝试:
Content-MD5