我在React Native for Coinbase中使用了OAuth2身份验证。不幸的是,我意识到Coinbase Pro不支持OAuth2。我一直在尝试使API密钥身份验证正常工作。我看到的所有示例都使用NodeJS的“ crypto”库。我已经尝试过了,它已经贬值了,不能在React和React Native上使用。我通常使用效果很好的CryptoJS库。
我不确定应如何设置CB-ACCESS-SIGN的格式。
const signed = CryptoJS.HmacSHA512(message, secret).toString();
这将返回类似这样的内容:
b24d709a6beb5e7b0b0b763b5af8a10c988d1424ee1ab693618b90f2950b15948e60efaaff0ea0a3e5a759ee7e8ca323a8d890bbe295e25e099d9db32c01c8a1
是否需要用十六进制或base64编码?
我需要一些帮助来构建CB-ACCESS-SIGN。
我已经尝试了“ crypto”库,该库已被贬值并且不能在React或React Native中使用。
我曾尝试以不同的方式对密钥进行编码,但还没有完全起作用。
我将它们放在一起以尽可能具体地测试问题...
import CryptoJS from 'crypto-js';
import axios from 'axios';
coinbaseOrders = () => {
const { key, secret } = this.state;
const method = 'GET';
const uri = 'https://api.pro.coinbase.com/orders?status=all';
const timestamp = Math.floor(Date.now() / 1000);
const message = `${timestamp}${method}${uri}`;
const signed = CryptoJS.HmacSHA512(message, secret).toString();
// const signed = CryptoJS.enc.Hex.parse(CryptoJS.HmacSHA512(message, secret).toString()).toString();
const headers = {
'User-Agent': 'reactnative',
'Content-Type': 'application/json',
'CB-ACCESS-SIGN': signed,
'CB-ACCESS-TIMESTAMP': timestamp,
'CB-ACCESS-KEY': key,
'CB-VERSION': '2019-05-22'
};
console.log('key', key);
console.log('secret', secret);
console.log('method', method);
console.log('uri', uri);
console.log('timestamp', timestamp);
console.log('message', message);
console.log('signed', signed);
console.log('headers', headers);
axios
.get(uri, {
method,
headers
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
}
this.coinbaseOrders();
预期结果是API密钥帐户的Coinbase Pro订单列表。
根据我的尝试,我收到了错误代码400和401。
我有同样的问题。我试图将PHP示例从Coinbase文档站点移植到Javascript,但是我也没有任何成功。
function signature(request_path = '', body = '', timestamp = false, method = 'GET') {
body = (typeof (body) == 'object') ? JSON.stringify(body) : body;
timestamp = timestamp ? timestamp : new Date().getTime() / 1000;
var what = timestamp + method + request_path + body;
var sig = CryptoJS.HmacSHA256(what, atob(password));
return btoa(sig);
}
有人知道吗?我的想法不多了。