Javascript Coinbase Pro身份验证:没有有效的签名

Javascript Coinbase Pro身份验证:没有有效的签名,javascript,coinbase-api,Javascript,Coinbase Api,我正试图通过谷歌脚本验证Coinbase Pro。我已经在Postman中使用CryptoJS实现了这一点,但我遇到了一些问题。我已经使用一个测试密钥和秘密字符串设置了一个测试,以找出和与Google提供的实现之间的差异,并注意到参数上的差异:CryptoJS.HmacSHA256需要一个秘密作为字数组,而Utilities.computeHmacSha256Signature需要一个秘密作为字符串 在《邮递员》中,我正在执行以下操作,以将apiSecret的字数组传递到CryptoJS.Hma

我正试图通过谷歌脚本验证Coinbase Pro。我已经在Postman中使用CryptoJS实现了这一点,但我遇到了一些问题。我已经使用一个测试密钥和秘密字符串设置了一个测试,以找出和与Google提供的实现之间的差异,并注意到参数上的差异:CryptoJS.HmacSHA256需要一个秘密作为字数组,而Utilities.computeHmacSha256Signature需要一个秘密作为字符串

在《邮递员》中,我正在执行以下操作,以将apiSecret的字数组传递到CryptoJS.HmacSHA256:

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);
}
也许有更好的方法可以做到这一点,但至少现在正在计算正确的签名