Skip to main content
Когда мини-приложение открывается на кастомной странице школы, Exode передаёт ему initData — строку с данными пользователя и школы, подписанную HMAC-SHA256 (аналог initData в Telegram Mini Apps). Проверив подпись на своём сервере, вы можете доверять этим данным и авторизовать пользователя без собственной регистрации.
Данные из postMessage-контекста (ctx.user) не подписаны и годятся только для отображения. Любая авторизация на вашем бэкенде должна опираться исключительно на проверенную initData.

Как это работает

  1. Exode открывает вашу страницу в iframe с адресом https://ваш-домен/…#exodeInitData=<строка>.
  2. Мини-приложение читает строку из fragment (retrieveInitData) и отправляет своему бэкенду.
  3. Бэкенд проверяет подпись секретом страницы (verifyInitData) и получает данные пользователя.
Секрет страницы выдаётся в админке школы («Компания» → «Страницы школы») при создании страницы и хранится только на вашем сервере.

В мини-приложении (браузер)

retrieveInitData читает fragment один раз, очищает его из адресной строки (чтобы подписанные данные не утекали при копировании ссылки) и кэширует значение.

На вашем сервере (Node.js)

При невалидной подписи, чужом секрете или протухшей auth_date функция бросает исключение.

Формат подписи

Если вы не используете Node.js — проверить подпись можно вручную на любом языке:
Пример на Node.js без SDK:

Рекомендации по безопасности

  • Ограничьте окно auth_date (maxAgeSec) — 24 часа или меньше.
  • Отдавайте на страницах мини-приложения заголовок Content-Security-Policy: frame-ancestors https://<домен-вашей-школы> — это гарантирует, что приложение встроено именно в Exode.
  • Передавайте targetOrigin в конструктор ExodeMiniApp — origin страницы школы.
  • Никогда не проверяйте подпись в браузере: секрет не должен покидать ваш сервер.
  • При компрометации секрета перевыпустите его в админке — старые initData перестанут проходить проверку.

Обновлено: 2026-08-19 10:50 UTC