Power BI. Коннектор к API с секретным ключом и сигнатурой закодированной HMAC SHA256, Power BI. Connector for API with authentication by secret key and signature encoded by HMAC SHA256
Всем добра. Потребовалось по работе лазить в API к одному из интернет-магазинов, и с радостью обнаружил что в #shared ничего вообще нет на тему кодирования хэша для формирования сигнатуры запроса к ресурсу. А вот у ресурса сигнатура имеется, и надо что-то делать. После некоторых изысканий выяснил что кое-что в PQ на эту тему все таки есть, но не в стандарте, а в наборе функций для создания собственных коннекторов. Засучив рукава, поставил VS с нужными надстройками и собрал вот такое чудо. Если кому надо, пользуйтесь, как подключить такой коннектор в инете и на сайте МС инструкций навалом. Краткую инструкцию по тому что куда скармливать самому коннектору чуть позже приложу, ну и по мере развития и исправлений выявленных глюков буду обновлять. Коннектор протестирован на боевом API все отлично выгружается. При установке шлюза в стандартном режиме коннектор отлично работает и после публикации отчета в облаке. Все инструкции по подключению коннекторов к Power BI находятся по ссылкам ниже. Справка по функции вшита в нее и вызывается стандартным способом, т.е. вызовом функции без скобок и аргументов. https://github.com/PooHkrd/GetHMACwithCreds https://github.com/PooHkrd/GetHashSHA256 В потоках данных пользовательские коннекторы не работают.
Итак, по просьбам трудящихся собрал ещё один коннектор, который на входе получает текстовую строку, а на выходе возвращает ее хэш при помощи алгоритма sha256. Использовать его очень легко: положили в папку согласно инструкции. Запускаем pbi и находим его в разделе other. Вызов осуществляется такой формулой
Код
=GetHashSHA256.Contents( "text" )
Пока от единственного пользователя поступил отзыв что запрос к api с полученным хэшем работает в редакторе запросов, но не пашет при попытке загрузить результат запроса в модель. Если кто желает потестировать. Велкам. Архив прикреплен к стартовому сообщению.
Как и планировал выкладываю последний коннектор из нужных для подключения к API с хэшированием ключей через Power BI. Сам коннектор прикручен к стартовому сообщению. Сие творение используется для формирования HMAC (hash-based message authentication code) на основе двух аргументов, а именно текст запроса и ключа авторизации. Для использования по инструкции из предыдущего поста кладем файл в нужную папку и наблюдаем новый коннектор в разделе others. Для вызова функции используем код:
Код
= GetHMAC.Contents( "text", "key" )
На выходе получаем хэш созданный на базе этих двух аргументов. Далее скармливаем его вашему API согласно приведенной к нему документации. Функция протестирована, на API Ламоды - работает отлично. В теории должна работать и в DataFlows, но пока не тестировал. Да, перевыложил предыдущий коннектор, исправил в нем блок для прохождения проверки авторизации при настройке подключения через шлюз. Всем добра.
Дмитрий Бабаев, обязательно прошу предоставить обратную связь. по результатам. Если что-то не будет работать в Desktop или в облаке - обращайтесь - помогу.
Дмитрий Бабаев, вы покажите для каких аргументов функции какой нужно получить вывод? Ваши реальные запросы и ключи не нужны, любой текст. Если есть возможность показать с какими настройками вы это делаете в каком-либо онлайн-конвертере HMAC то покажите в нем.
Дмитрий Бабаев, ок, сегодня вечером погляжу, завтра может чего получится. Вот так попробуйте, у меня получилось вроде.
Скрытый текст
Код
let
rec = [ symbol="LTCBTC",
side="BUY",
type="LIMIT",
timeInForce="GTC",
quantity="1",
price="0.1",
recvWindow="5000",
timestamp="1499827319559"],
string = Uri.BuildQueryString( rec ),
key = "NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j",
result = GetHMAC.Contents(string,key)
in
result
Крайне важно! Чтобы все обновлялось в облаке при настройке подключений шлюза необходимо указать одинаковые уровни конфиденциальности для источников GetHMAC и https://api.binance.com/api/v3/order. У меня установлен "Организационный". Все обновляется. Без этого валится в ошибку. Также при настройке подключения к шлюзу установите галочку "Пропустить тестирование подключения". Я вроде сделал в коннекторе handler тестирования по инструкции, но почему то выдает сбой, но в десктопе и облаке при этом все работает. И последнее, перевыложил коннектор в стартовом сообщении.
Спасибо, выдает правильно, но запрос все равно где-то у меня не проходит на сайте. Побуквенно сравниваю с тем, что реально проходило - и не вижу отличий.
Дмитрий Бабаев, тут ХЗ не вы один жалуетесь, но тут, подозреваю, проблема не в коннекторе, а в ленивости языка. Один коллега жаловался, что АПИ ростелекома тоже не выдавал ответ, хотя коннектор выдает корректный хэш. На Ламоде у меня все отлично работает, тащит любые объемы. Как со старым коннектором, так и с новым. Сегодня вечером попробую ваш запрос запихать в свой самый первый коннектор. Скиньте полный код вашего запроса к API в личку с кодами-примерами из инструкции по вашей ссылке.