Javascript Coinbase Pro身份验证:没有有效的签名
我正试图通过谷歌脚本验证Coinbase Pro。我已经在Postman中使用CryptoJS实现了这一点,但我遇到了一些问题。我已经使用一个测试密钥和秘密字符串设置了一个测试,以找出和与Google提供的实现之间的差异,并注意到参数上的差异:CryptoJS.HmacSHA256需要一个秘密作为字数组,而Utilities.computeHmacSha256Signature需要一个秘密作为字符串 在《邮递员》中,我正在执行以下操作,以将apiSecret的字数组传递到CryptoJS.HmacSHA256:Javascript Coinbase Pro身份验证:没有有效的签名,javascript,coinbase-api,Javascript,Coinbase Api,我正试图通过谷歌脚本验证Coinbase Pro。我已经在Postman中使用CryptoJS实现了这一点,但我遇到了一些问题。我已经使用一个测试密钥和秘密字符串设置了一个测试,以找出和与Google提供的实现之间的差异,并注意到参数上的差异:CryptoJS.HmacSHA256需要一个秘密作为字数组,而Utilities.computeHmacSha256Signature需要一个秘密作为字符串 在《邮递员》中,我正在执行以下操作,以将apiSecret的字数组传递到CryptoJS.Hma
var hash = CryptoJS.enc.Base64.parse(pm.variables.get('apiSecret'));
在我的谷歌脚本中,我正在做sam
var hash = Utilities.base64Decode(apiSecretB64)
我试着用同样的秘密和信息来调试它,但是得到了不同的结果
我在《邮递员》中的实现:
function computeSignature(request) {
const data = request.data;
const method = request.method.toUpperCase();
const path = getPath(request.url);
const body = (method === 'GET' || !data) ? '' : JSON.stringify(data);
const message = timestamp + method + path + body;
const apiSecret = CryptoJS.enc.Base64.parse(pm.variables.get('apiSecret'));
const hash = CryptoJS.HmacSHA256(message, apiSecret);
const hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
return hashInBase64;
}
以及我在Google脚本中的实现:
function computeSignature(request, path, timestamp) {
const data = request.data;
const method = request.method;
const body = (method === 'GET' || !data) ? '' : JSON.stringify(data);
const message = timestamp + method + path + body;
var apiSecret = Utilities.base64Decode(apiSecretB64);
var hash = Utilities.computeHmacSha256Signature(message, apiSecret);
hash = Utilities.base64Encode(hash);
return hash;
}
有人知道我为什么会得到不同的结果吗?我通过将消息从字符串转换为字节数组来解决这个问题:
function computeSignature(request, path, timestamp) {
const data = request.data;
const method = request.method;
const body = (method === 'GET' || !data) ? '' : JSON.stringify(data);
const message = timestamp + method + path + body;
var apiSecretByteArr = Utilities.base64Decode(apiSecretB64);
var messageByteArr = Utilities.base64Decode(Utilities.base64Encode(message));
var hash = Utilities.computeHmacSha256Signature(messageByteArr, apiSecretByteArr);
return Utilities.base64Encode(hash);
}
也许有更好的方法可以做到这一点,但至少现在正在计算正确的签名