我正在用Angularjs开发一个应用程序,它调用Tether.to站点(http://platform.tether.to/)的一些API。
API需要发送如下格式的header:
Authorization: APIAuth TetherAPIKey:SignatureAuthorization header的计算方法如下:
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);
});我的代码哪里错了?为什么接口("/transactions")总是返回{"code":401,"error":"Unauthorized"}
发布于 2016-02-02 04:25:20
当您强制将WordArray转换为字符串时,Content-MD5默认编码为十六进制,但Content-MD5必须是base64编码的(从项目的ruby代码判断)。
尝试:
stringToSign = 'application/json,' + CryptoJS.MD5('').toString(CryptoJS.enc.Base64) + ',' + url + ',' + timestamp;https://stackoverflow.com/questions/35137122
复制相似问题