Данные пользователя, полученные интерфейсом Mini App, не являются готовым разрешением на серверные действия. Сервер должен подтвердить данные запуска по правилам Telegram, определить пользователя и проверить права на запрашиваемый объект.
Разделите отображение и доверие
Интерфейс может показывать имя и фотографию, но доступ к записям должен определяться сервером. Параметр user_id, присланный из браузера, нельзя считать достаточным доказательством личности.
Telegram различает исходную строку initData и удобный объект initDataUnsafe. В официальной документации указано, что данные для серверного использования нужно проверять. Проверка подписанных данных и проверка прав — два отдельных шага.
Определите срок допустимого запуска
У данных есть время auth_date. В системе нужно согласовать срок, в течение которого запуск принимается, и поведение после его истечения. Проверка времени дополняет проверку подписи.
Не обещайте бессрочный вход только потому, что приложение продолжает отображаться. Пользователь может оставить его открытым, вернуться позже или потерять соединение. В каждом состоянии нужно понятное продолжение либо предложение открыть приложение заново.
Проверьте принадлежность объектов
Подтверждённый пользователь не должен автоматически получать доступ к любой записи сервиса. Сервер проверяет, принадлежит ли заказ или документ этому пользователю и разрешено ли запрашиваемое действие.
| Запрос | Что проверить |
|---|---|
| Открыть свой заказ | Принадлежность заказа |
| Изменить запись | Право и допустимость текущего состояния |
| Получить документ | Доступ к самому файлу |
| Выполнить административное действие | Отдельное разрешение |
| Повторить операцию | Сохранённый результат и правила повторов |
Такие проверки нужны независимо от видимости кнопок в интерфейсе.
Сохраняйте секреты на серверной стороне
Секреты интеграции не должны попадать в код приложения, который загружает браузер. Для диагностики не записывайте полный набор секретных параметров в открытый журнал.
Определите порядок изменения секретов и доступов при передаче проекта. Настройки окружения, журнал и исходники должны иметь согласованные границы доступа. Конкретную реализацию проверяют для архитектуры проекта.
Включите отказные сценарии в приёмку
На тестовой среде проверьте корректный запуск, изменённые данные, просроченное время и попытку открыть чужой объект. Проверьте также прямой запрос к административной операции из обычного пользовательского сценария.
Ожидаемый отказ должен быть предсказуемым и не раскрывать закрытые сведения. В интерфейсе пользователь должен понимать, нужно ли повторить действие или заново открыть приложение.
Эти требования стоит включить в задание на Telegram Mini App. Тогда авторизация оценивается по подтверждённому доступу и проверкам, а не по одному экрану с именем пользователя.
