Авторизация
Поток
MAX Messenger (WebView)
│ window.WebApp.initData (подписанная строка)
▼
Мини-приложение
│ sdk.init(initData)
▼
Backend MAXSCRM
│ POST /api/v1/auth/max
│ проверка подписи HMAC-SHA256 → JWT (orgId внутри)
▼
SDK хранит JWT в памяти, автоматически обновляет
Проверка подписи initData
initData — строка key=value&... (параметры отсортированы), подписанная
секретным ключом бота:
secret_key = HMAC_SHA256("WebAppData", botToken)
signature = HMAC_SHA256(secret_key, отсортированные key=value)
Требования:
auth_dateне старше 1 часа;- подпись совпадает;
- приложение работает только с initData из своего бота.
JWT
POST /api/v1/auth/max с { initData } возвращает:
{
"accessToken": "...",
"refreshToken": "...",
"user": { "id": "...", "orgId": "...", "role": "admin", "name": "..." }
}
orgIdвстроен в JWT — тенант изолирован автоматически;- access-токен подставляется SDK во все запросы;
- refresh-токен одноразовый (ротация, защита от replay).
Dev-режим
Для локальной разработки доступен dev-вход:
curl -X POST http://localhost:3000/api/v1/auth/dev \
-H "Content-Type: application/json" \
-d '{"maxUserId":"1","orgSlug":"default"}'
Первый пользователь организации получает роль admin.