Як авторизуватися у відкритому API Електронного кабінету?
Кумарить через оглядач авторизуватися там щоразу, щоб просто подивитися, як мої податки й статус єдинника поживають. Бачу на головній: новина, у нас тепер відкритий API! Ну, думаю, зараʼ скрипта зроблю й ним хутенько щодня че́катиму. Еге.
curl 'https://cabinet.tax.gov.ua/ws/public_api/ta/splatp?year=2020' -i -X GET \ -H 'Content-Type: application/json' \ -H 'Authorization: MIIStwYJKoZIhvcNAQ... -H 'Accept: application/json'
Дуже інформативно обрубано.
Авторизація — в header запиту Authorization ЄДРПОУ/РНОКПП підписаний внутрішнім підписом з додаванням сертифікату в BASE64
Що це, kr̥wa, означає, це гуманітаріями писане? Додавання — це конкатенація? До підписування чи після?
Сам Електронний кабінет запитує дані з приватного API, і авторизується инакше: рядком вигляду «Bearer <якийсь UUID>». Ці UUID тимчасові; токен, отриманий на cabinet.tax.gov.ua/user/settings, не підходить теж. Тож звідти рядок авторизації видерти не вийде.
Доведеться у ДержРадПобСоюзТрестКриптографії розбиратися, щоб просто підписати ключем ІПН?
А, і от ще цікавинка:

Ну ліпше вже така документація, ніж ніяка, еге. Головне, що не Silverlight!
17 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівХтось знайшов рішення?
Добрий день, вдалось відправити запит?
З видертими з самого Кабінету рядками авторизації деякий час працює.
Розбиратися, як ще й вони генеруються — мотивації замало, у мене ще не настільки той Кабінет у печінках сидить ☺
Вроде работает их публичное апи. Нужно подписать строку из вашего ЕДРПОУ или ИПН. Плейграунд подписания можно попробовать этот js.sign.eu.iit.com.ua. В запросах в заголовок Authorization пишите значение base64 представления подписи. Обязательно ставьте флаги додавання сертифікату, та позначки часу. Подпись актуальна вроде 1 час с момента получения метки
Привет, токен нужно получить в личном кабинете:
— ссылка (cabinet.tax.gov.ua/user/settings)
— пункт (Токени відкритої частини)
Чукча не читатель? ;)
И кусок строки в примере не похож на токен в чистом виде: там явно base64, а не UUID.
Добрий день. Вам вдалося розібратися в цій документації?
Ні, ідею полишено до ліпших часів.
Бо якщо тут справді потрібна ДСТУ-криптографія, то реалізація вийде далеко за рамки простого скрипта, попри відкритий API.
Не могли же разработчики этого апи сделать прямо уникальную авторизацию для него =)
Открываем Dev Tools браузера, при входе в кабинет смотрим на запросы и видим:
https://cabinet.tax.gov.ua/ws/auth/oauth/token?grant_type=password&username=XXX&password=%long_auth_password%Собственно %long_auth_password% и есть тот самый «ЄДРПОУ/РНОКПП пiдписаний внутрiшнiм пiдписом з додаванням сертифiкату в BASE64»
Угу, только для его срабатывания должна в заголовке Authorization быть строка вида
Basic блабла, где блабла — base64 от какого-то хэша капсом без минусов, два раза и через двоеточие (лол, зачем?) Остаётся ещё разобраться, откуда он берётся.И не тянет ли уже всё это на нарушение ToS из-за реверс-инжиниринга? ;)
В первом приближение и так сойдёт =) Пароль этот инвалидироваться не должен, так что достаточно его один раз скопировать и всё. Но да, это всё же не user-friendly.
Посмотреть в отправляемые запросы уж точно на нарушение не потянет. А вот если де-обфусцировать их сорцы — то может что-то и нарушать.
Ну ладно — тот хэш, видимо, тоже не меняется.
Пока наклёвывается такое:
А вот похоже этот password таки меняется, теперь мне выдаёт
{"error":"Помилка","error_description":"Помилка перевірки підпису:хибний підпис"}Перезайдя в кабинет я уже вижу другое значение в поле password. Значит «Authorization» хедер может иметь несколько вариаций, и эта нам не подходит...
Похоже всё это непотребство с подписями происходит через либу EUSignCP, у привата даже есть микро пример: acsk.privatbank.ua/...11113-290920-0908-295.pdf и неработающая ссылка на их гит =)
Ну ЧиТД: шаманство с очечественной ГосСовБытСоюзТрестКриптографией Цвиркунчык-Пострыбунчык™.
ну то візміть на гітхабі опенсорцну дсту-кріптографію, там не складно
Ну и налоги:
Не все из этих чисел даже в Кабинете отображаются, хехе.