Что такое 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. Если эти значения равны, переданные данные инициализации можно считать достоверными.
Оригинал перевода

Другие полезные инструменты