Помогите пройти авторизацию post-get запросами на сервисе Nicehash

  • Автор темы Автор темы TopFlow
  • Дата начала Дата начала

TopFlow

Client
Регистрация
24.06.2020
Сообщения
59
Реакции
12
Баллы
8
коллеги добрый день!
Уже второй день пытаюсь разобраться как пройти авторизацию на сервисе Nicehash,
есть документация по АПИ:


но не как не могу разобраться с этими двумя пунктами:

X-Request-Id: (required, unique identifier of specific request, client should have local awareness that some app action should be done only once on server, if for some reason request is processed by server and client does not know anything about it (request failed). This ID will provide server information that it will not repeat action if it was already processed)

X-Auth: (API Key + ":" + HMAC signature, example: 4ebd366d-76f4-4400-a3b6-e51515d054d6:fb8484df7941a4d0c337939a73cc8fc09f50bd3309af5e1926baaee4d5059dfc)

Я так понимаю в первом случае просто генерим уникальное текстовое выражение, а вот с X-Auth - у меня конкретный затык...
Буду очень признателен за любую помощь!
 
  • Спасибо
Реакции: Livesferma
Вот тут есть примеры генерации HMAC signature на разных языках. Начать, наверное, можно оттуда.
Нашел на просторах такой код для генерации HMAC sha256 по тексту и ключу, не подскажите как его переделать и заставить работать в постере - заранее спасибо)

static string HMACHASH(string str, string key)
{
byte[] bkey = Encoding.Default.GetBytes(key);
using (var hmac = new HMACSHA256(bkey))
{
byte[] bstr = Encoding.Default.GetBytes(str);
var bhash = hmac.ComputeHash(bstr);
return BitConverter.ToString(bhash).Replace("-", string.Empty).ToLower();
}
}
 
Последнее редактирование:
Нашел на просторах такой код для генерации HMAC sha256 по тексту и ключу, не подскажите как его переделать и заставить работать в постере - заранее спасибо)
Чтоб составить правильно HMAC signature данные надо упаковать определённым образом. По ссылке из моего прошлого сообщения есть готовая реализация, надо её только портировать в ZP. Я этого сейчас сделать не могу.
Возможно кто-то ещё увидит этот топик и поможет.
Можете создать тему в рекламном разделе.
 
Чтоб составить правильно HMAC signature данные надо упаковать определённым образом. По ссылке из моего прошлого сообщения есть готовая реализация, надо её только портировать в ZP. Я этого сейчас сделать не могу.
Возможно кто-то ещё увидит этот топик и поможет.
Можете создать тему в рекламном разделе.
Подскажите как правильно упаковать данные. есть код. но он не выдает правильную сигнатуру. думаю проблема в разделителях. Два дня почти не сплю. ничего не выходит вот код
C#:
Развернуть Свернуть Копировать
string result = project.Variables["kodiruem"].Value;
string secret = project.Variables["Api_secret"].Value;
string sha256 = string.Empty;

Func<string, string, string> Sha256 = delegate(string key, string data){
    string line = string.Empty;
    using (var hmc = new  System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(key))){
        line = Convert.ToBase64String(hmc.ComputeHash(Encoding.UTF8.GetBytes(data)));
    }
    return line;
};

return Sha256(secret, result); // Здесь дёргаем...
 
Подскажите как правильно упаковать данные. есть код. но он не выдает правильную сигнатуру. думаю проблема в разделителях. Два дня почти не сплю. ничего не выходит вот код
C#:
Развернуть Свернуть Копировать
string result = project.Variables["kodiruem"].Value;
string secret = project.Variables["Api_secret"].Value;
string sha256 = string.Empty;

Func<string, string, string> Sha256 = delegate(string key, string data){
    string line = string.Empty;
    using (var hmc = new  System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(key))){
        line = Convert.ToBase64String(hmc.ComputeHash(Encoding.UTF8.GetBytes(data)));
    }
    return line;
};

return Sha256(secret, result); // Здесь дёргаем...
Этот код просто генерирует sha256 и конвертирует его в base64.

Вы уверены, что Вам именно это нужно?
Какие данные подаете на вход?
Что находится в kodiruem?
Что находится в Api_secret?
Какие данные ожидаете на выходе?
Точно необходимо в Encoding.UTF8, а не в Encoding.ASCII например?
На выходе должен быть SHA256 или base64 из sha256?

Если смотреть относительно документации, и взять ключи оттуда, то получится примерно такой код (результат совпадает с тем, что в документации).
Рабочий вариант относительно nicehash:
Развернуть Свернуть Копировать
string[] array = new[]{
    "4ebd366d-76f4-4400-a3b6-e51515d054d6",
    "\x00",
    "1543597115712",
    "\x00",
    "9675d0f8-1325-484b-9594-c9d6d3268890",
    "\x00",
    "\x00",
    "da41b3bc-3d0b-4226-b7ea-aee73f94a518",
    "\x00",
    "\x00",
    "GET",
    "\x00",
    "/main/api/v2/hashpower/orderBook",
    "\x00",
    "algorithm=X16R&page=0&size=100"
};
string text = string.Join(string.Empty,array );
string API_Secret = "fd8a1652-728b-42fe-82b8-f623e56da8850750f5bf-ce66-4ca7-8b84-93651abc723b";
string API_Key = "4ebd366d-76f4-4400-a3b6-e51515d054d6";
string result = "21e6a16f6eb34ac476d59f969f548b47fffe3fea318d9c99e77fc710d2fed798"; // То что должно получиться

Func<string, string, string> Sha256 = delegate(string key, string data){
    string line = string.Empty;  
    using (var hmac = new  System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(key))){
            line =    string.Join(string.Empty, hmac.ComputeHash(Encoding.UTF8.GetBytes(data)).ToList().Select(b => b.ToString("x2")).ToArray());
    }  
    return line;
};

return string.Join(":", new[]{API_Key, Sha256(API_Secret, text)});
99185
 
Последнее редактирование:
Если смотреть относительно документации, и взять ключи оттуда, то получится примерно такой код (результат совпадает с тем, что в документации).

Здравствуйте. Ваш код работает. И я даже подумал что все получится. GET запросы выполнялись. И я почти дописал проект. А когда очередь дошла до POST запроса для изменения цены ордера, все накрылось медным тазом. В документации написано:

Additionally, if REST endpoint requires a body it has to be included in input as an extra field prefixed by a delimiter:
  • Request body (example: {"test":true} )

Это входные данные пост запроса. Но их тоже я так понял нужно добавлять в код для создания HASH.
Я отправлял пост запрос через сайт. и через окно трафика делал кубик POST запроса. там можна увидеть параметр X-Auth который принимает сервер. Но подставив данные в скрипт видно что эта строка отличается. Я по разному пробовал добавить во входные данные скрипта эти дополнительные данные, но ничего не получилось.

Помогите правильно создать запрос POST. Пожалуйста.
 
Здравствуйте. Ваш код работает. И я даже подумал что все получится. GET запросы выполнялись. И я почти дописал проект. А когда очередь дошла до POST запроса для изменения цены ордера, все накрылось медным тазом. В документации написано:

Additionally, if REST endpoint requires a body it has to be included in input as an extra field prefixed by a delimiter:
  • Request body (example: {"test":true} )

Это входные данные пост запроса. Но их тоже я так понял нужно добавлять в код для создания HASH.
Я отправлял пост запрос через сайт. и через окно трафика делал кубик POST запроса. там можна увидеть параметр X-Auth который принимает сервер. Но подставив данные в скрипт видно что эта строка отличается. Я по разному пробовал добавить во входные данные скрипта эти дополнительные данные, но ничего не получилось.

Помогите правильно создать запрос POST. Пожалуйста.
Попробуйте как-то так сформировать.
C#:
Развернуть Свернуть Копировать
string[] array = new[]{
    "4ebd366d-76f4-4400-a3b6-e51515d054d6", // ключ
    "\x00",// разделитель
    "1543597115712", // время
    "\x00",// разделитель
    "9675d0f8-1325-484b-9594-c9d6d3268890", //nonce
    "\x00",// разделитель
    "\x00",// разделитель
    "da41b3bc-3d0b-4226-b7ea-aee73f94a518", // id
    "\x00",// разделитель
    "\x00",// разделитель
    "POST", // тип запроса
    "\x00",// разделитель
    "/main/api/v2/hashpower/orderBook", // ссылка
    "\x00", // разделитель
    "algorithm=X16R&page=0&size=100", // параметры
    "\x00",// разделитель
    "содержимое body POST запроса"
};
Вот на гитхабе говорится, что тело запроса должно быть подано последним, если оно есть:
99368
 
Попробуйте как-то так сформировать.
Может тут дело в синтаксисе. Вот как правильно добавить в код эту строку. Точно такая строка передается на сервер

{"price":"0.4420","displayMarketFactor":"TH","marketFactor":"1000000000000"}
 
Может тут дело в синтаксисе. Вот как правильно добавить в код эту строку. Точно такая строка передается на сервер

{"price":"0.4420","displayMarketFactor":"TH","marketFactor":"1000000000000"}
Сначала формируете json примерно вот так, как показываю ниже.
А потом уже этот json подставляем в последний элемент массива, который был указан в предыдущем сообщении.
C#:
Развернуть Свернуть Копировать
var dic = new Dictionary<string, object>();
dic["price"] = "0.4420";
dic["displayMarketFactor"] = "TH";
dic["marketFactor"] = "1000000000000";

string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(dic,  Global.ZennoLab.Json.Formatting.None);
return json;
99372

C#:
Развернуть Свернуть Копировать
string[] array = new[]{
    "4ebd366d-76f4-4400-a3b6-e51515d054d6", // ключ
    "\x00",// разделитель
    "1543597115712", // время
    "\x00",// разделитель
    "9675d0f8-1325-484b-9594-c9d6d3268890", //nonce
    "\x00",// разделитель
    "\x00",// разделитель
    "da41b3bc-3d0b-4226-b7ea-aee73f94a518", // id
    "\x00",// разделитель
    "\x00",// разделитель
    "POST", // тип запроса
    "\x00",// разделитель
    "/main/api/v2/hashpower/orderBook", // ссылка
    "\x00", // разделитель
    "algorithm=X16R&page=0&size=100", // параметры
    "\x00",// разделитель
   json
};
 
Последнее редактирование:
  • Спасибо
Реакции: Vital79 и one
Сначала формируете json примерно вот так, как показываю ниже.
А потом уже этот json подставляем в последний элемент массива, который был указан в предыдущем сообщении.

Огромнейшее спасибо. Все работает и даже ордера создает четко.
Напишите кошелек Litecoin скину благодарность.
 
коллеги добрый день!
Уже второй день пытаюсь разобраться как пройти авторизацию на сервисе Nicehash,
есть документация по АПИ:


но не как не могу разобраться с этими двумя пунктами:

X-Request-Id: (required, unique identifier of specific request, client should have local awareness that some app action should be done only once on server, if for some reason request is processed by server and client does not know anything about it (request failed). This ID will provide server information that it will not repeat action if it was already processed)

X-Auth: (API Key + ":" + HMAC signature, example: 4ebd366d-76f4-4400-a3b6-e51515d054d6:fb8484df7941a4d0c337939a73cc8fc09f50bd3309af5e1926baaee4d5059dfc)

Я так понимаю в первом случае просто генерим уникальное текстовое выражение, а вот с X-Auth - у меня конкретный затык...
Буду очень признателен за любую помощь!
привет отпиши пожалуйста в тг livesferma
 
Вы мне ничего не должны.
Хорошего вечера!
Здравствуйте. Помогите если возможно с аутентификацией на бирже Coinex вот их документация https://docs.coinex.com/api/v2/authorization

Постоянно приходит ответ Signature Incorrect. Там всего три значения нужно в кучу собрать и не получается. GET_POST_auth собираю переменной обработка текста, она имеет такой вид
GET/assets/spot/balance1734014093000

Может сталкивались с этой биржей.
Для формирования сигнатуры использую такой код
C#:
Развернуть Свернуть Копировать
string strKey = project.Variables["secret_key"].Value;
string data = project.Variables["GET_POST_auth"].Value;
        HMACSHA256 hma = new HMACSHA256();
     hma.Key = Encoding.UTF8.GetBytes(strKey);
project.Variables["hmac256"].Value = BitConverter.ToString(hma.ComputeHash(Encoding.UTF8.GetBytes(data))).Replace("-","").ToLower();
 
Последнее редактирование:
Здравствуйте. Помогите если возможно с аутентификацией на бирже Coinex вот их документация https://docs.coinex.com/api/v2/authorization

Постоянно приходит ответ Signature Incorrect. Там всего три значения нужно в кучу собрать и не получается. GET_POST_auth собираю переменной обработка текста, она имеет такой вид
GET/assets/spot/balance1734014093000

Может сталкивались с этой биржей.
Для формирования сигнатуры использую такой код
C#:
Развернуть Свернуть Копировать
string strKey = project.Variables["secret_key"].Value;
string data = project.Variables["GET_POST_auth"].Value;
        HMACSHA256 hma = new HMACSHA256();
     hma.Key = Encoding.UTF8.GetBytes(strKey);
project.Variables["hmac256"].Value = BitConverter.ToString(hma.ComputeHash(Encoding.UTF8.GetBytes(data))).Replace("-","").ToLower();
/v2 перед /assets пропустил. все решилось. спасибо!!!
 
Последнее редактирование:

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)