Проверка подлинности ключа API Coinbase Pro (GDAX) в React / Native с использованием CryptoJS для подписи - PullRequest
0 голосов
/ 23 мая 2019

Я получил аутентификацию OAuth2, работающую в React Native для Coinbase. К сожалению, я понял, что Coinbase Pro не поддерживает OAuth2. Я пытался заставить работать аутентификацию по ключу API. Все примеры, которые я видел, используют библиотеку «crypto» для NodeJS. Я пробовал это, и это устарело и не работает с 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();

Ожидаемый результат - список заказов Coinbase Pro для учетной записи API Key.

В зависимости от того, что я пробовал, я получал коды ошибок 400 и 401.

...