如何使用CryptoJS在Angular.js中调用Tether.to API

时间:2016-02-01 17:53:03

标签: angularjs cryptojs

我正在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"}

1 个答案:

答案 0 :(得分:0)

当您强制将WordArray转换为字符串时,CryptoJS默认编码为Hex,但table-cells必须是Base 64编码(从项目的ruby代码判断)。

尝试:

Content-MD5