Coinbase Pro API - неверная подпись - PullRequest
0 голосов
/ 19 мая 2019

Это отредактировано из исходного сообщения:

Из документов:

Подписание сообщения Заголовок CB-ACCESS-SIGN создается путем создания HAMAC sha256 с использованием base64-декодированный секретный ключ на временной метке строки предварительного хэширования + метод + requestPath + тело (где + представляет конкатенацию строк) и base64-кодирование выходных данных.Значение метки времени совпадает с заголовком CB-ACCESS-TIMESTAMP.

Вот информация из ключа, который я удалил.Это из Coinbase Pro Sandbox:

publicKey:

06057d5b5e03d0f8587a248330402b21

passPhrase:

gcgs6k6rp0f

secretKey: EFAToD5heo66GIgZlT2TIZzJf8TYlmxyeRxRYDHTBv3lTt9XN6uaNS0RNAy0os/caR47x6EiPDOV3Ik+YzrfEA==

Я используюangular, в частности библиотека crypto-js для node.js:

private generateSignaturePro(timestamp: string, method: string, resourceUrl: string, requestBody: string): string {
    var prehash: string = timestamp + method + resourceUrl + requestBody;
    var key = (Buffer.from(this.secretKey, 'base64')).toString();
    return crypto.enc.Base64.stringify(crypto.HmacSHA256(prehash, key));
}

Время сервера: Время: 2019-05-20T19: 01: 38.711Z Время: 1558378898.711 (с / конечная точка времени)

вот мой запрос и ответ сервера:

Запрос:

Request URL: https://api-public.sandbox.pro.coinbase.com/accounts
Request Method: GET
Status Code: 400 
Remote Address: 104.16.161.226:443
Referrer Policy: no-referrer-when-downgrade

Заголовки запроса:

Provisional headers are shown
Accept: application/json, text/plain, */*
CB-ACCESS-KEY: 06057d5b5e03d0f8587a248330402b21
CB-ACCESS-PASSPHRASE: gcgs6k6rp0f
CB-ACCESS-SIGN: 0cc2BnQYdUhLucXSPwMTjpHjJ32G3RXSH44rSsEopvjAtY90uRCMVy6xUrzg/A/aRJBLqx390fcZc7lmJeP++g==
CB-ACCESS-TIMESTAMP: 1558378899
Referer: https://localhost:44342/dashboard
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36

Заголовки ответа:

access-control-allow-headers: Content-Type, Accept, cb-session, cb-fp
access-control-allow-methods: GET,POST,DELETE,PUT
access-control-allow-origin: *
access-control-expose-headers: cb-before, cb-after, cb-gdpr
access-control-max-age: 7200
cache-control: no-store
cf-cache-status: MISS
cf-ray: 4da08f74ba97cf68-IAD
content-length: 31
content-type: application/json; charset=utf-8
date: Mon, 20 May 2019 19:01:38 GMT
etag: W/"1f-4RjKVp8I05+xcnQ5/G16yRoMSKU"
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
status: 400
strict-transport-security: max-age=15552000; includeSubDomains
vary: Accept-Encoding
x-content-type-options: nosniff
x-dns-prefetch-control: off
x-download-options: noopen
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

Ответ:

{"message":"invalid signature"}

Что я делаю не так?

РЕДАКТИРОВАТЬ: Изменен метод на версию SHA 256.Все еще не работает.

1 Ответ

0 голосов
/ 29 мая 2019

Из библиотеки gdax-java (как она была названа до "coinbase pro") метод генерации подписи:

 String prehash = timestamp + method.toUpperCase() + requestPath + body;

 byte[] secretDecoded = Base64.getDecoder().decode(secretKey);
 keyspec = new SecretKeySpec(secretDecoded, "HmacSHA256");
 sha256 = (Mac) GdaxConstants.SHARED_MAC.clone();
 sha256.init(keyspec);
 return Base64.getEncoder().encodeToString(sha256.doFinal(prehash.getBytes()));

По крайней мере, при первоначальной проверке кода, который вывы используете спецификацию с использованием SHA512, а не HmacSHA256, поэтому я подозреваю, что это вероятная причина.

Здесь также больше справки с NodeJS в правом столбце для генерации подписей.https://docs.pro.coinbase.com/#creating-a-request

...