Что такое InitData?
Структура данных
InitData передается как URL-encoded строка с параметрами:
-
user- данные пользователя (JSON) -
chat- данные чата (JSON) -
auth_date- timestamp авторизации -
hash- HMAC-SHA256 подпись -
start_param- параметр запуска (опц.) -
query_id- ID запроса (опц.)
Валидация на сервере
Важно проверять подпись на бэкенде:
1. Пройдите по всем парам ключ-значение и создайте массив строковых значений в формате {ключ}={значение}. Хеш ключа должен быть исключен, но запомнен. Он представляет собой знак инициализации данных и будет использоваться на последнем этапе процесса проверки.
2. Отсортируйте вычисленный массив в алфавитном порядке.
3. Создайте HMAC-SHA256, используя ключ WebAppData, и примените его к токену Telegram Bot, который привязан к вашему мини-приложению.
4. Создайте HMAC-SHA256, используя результат предыдущего шага в качестве ключа. Примените его к массиву пар, соединенных разрывом строки (\n), полученному на втором шаге, и представьте результат в виде последовательности шестнадцатеричных символов.
5. Сравните хеш-значение, полученное на 1-м шаге, с результатом 4-го шага.
6. Если эти значения равны, переданные данные инициализации можно считать достоверными.