Я пытаюсь зашифровать строку в HMA C SHA256 в raw javascript, используя веб-библиотеку , но, похоже, она не работает. Я пытаюсь сделать это, чтобы вызвать Coinbase API . Вам нужно указать несколько значений в запросе GET, включая подпись, где у меня возникают проблемы. Подпись должна быть зашифрована HMA C SHA256. Подпись должна включать следующее:
Заголовок CB-ACCESS-SIGN
генерируется путем создания sha256 HMA C с использованием секретного ключа на preha sh string timestamp + method + requestPath + body
(где + представляет строку конкатенация). Значение метки времени совпадает с заголовком CB-ACCESS-TIMESTAMP
.
body
является строкой тела запроса или опускается, если тела запроса нет (обычно для запросов GET).
method
должно быть в верхнем регистре.
Я думаю, они говорят, что я могу опустить тело, потому что это запрос GET.
Мой код следующий:
Вызов библиотеки HTML:
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.js"></script>
Запрос Javascript Шифрование и GET:
url = "https://api.coinbase.com/v2/accounts"
var xmlHttp1 = new XMLHttpRequest();
xmlHttp1.open( "GET", "https://api.coinbase.com/v2/time", false);
xmlHttp1.send( null )
ts = xmlHttp1.responseText;
var ts1 = JSON.parse(ts)
var message = ts1.data.epoch + "GET" + url + ""
sha256(message);
var hash = sha256.hmac.create('key');
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", url, false ); // false for synchronous request
xmlHttp.setRequestHeader("CB-ACCESS-KEY", "XXXXXXXXXXXXXXXX");
xmlHttp.setRequestHeader("CB-ACCESS-TIMESTAMP", ts1.data.epoch);
xmlHttp.setRequestHeader("CB-ACCESS-SIGN", hash);
xmlHttp.send( null );
API-интерфейс coinbase отвечает:
{"errors":[{"id":"authentication_error","message":"invalid signature"}]}
означает, что все правильно, кроме подписи.
Спасибо.