Авторизация Frontend'ов Плагинов
Эта страница описывает browser-авторизацию для frontend'ов и admin UI, которые поставляются плагинами через HTTP-trigger. Это не системная админка SuperBotGo и здесь используется user_session, а не admin_session.
Когда Использовать
Используйте этот сценарий, если плагину нужен собственный веб-интерфейс:
- личный кабинет пользователя
- форма настройки, доступная определённой группе пользователей
- HTML/admin-страница плагина, которая вызывает HTTP-trigger API этого же плагина
Если речь про встроенную админку SuperBotGo (/admin/*), используйте системную admin auth.
Поток
Контракт Frontend'а
Старт логина:
window.location.href = `/api/auth/tsu/start?return_to=${encodeURIComponent(location.pathname + location.search)}`Проверка текущей host-сессии:
const res = await fetch('/api/auth/session', { credentials: 'include' })
const session = await res.json()Вызов HTTP-trigger endpoint'а:
await fetch('/api/triggers/http/my-plugin/profile', {
method: 'GET',
credentials: 'include',
})Logout:
await fetch('/api/auth/logout', {
method: 'POST',
credentials: 'include',
})Настройка HTTP-trigger
Host проверяет доступ до вызова wasm-плагина. Для browser-сценария включите у trigger'а:
allow user session- при необходимости
policy expression
Если allow user session выключен, user_session не даст доступ к endpoint'у, даже если пользователь успешно вошёл через ТГУ.
Внутри плагина auth-контекст приходит как ctx.HTTP.Auth:
if ctx.HTTP.Auth == nil || ctx.HTTP.Auth.Kind != "user" {
ctx.JSON(401, map[string]string{"error": "authentication required"})
return nil
}
ctx.JSON(200, map[string]any{
"user_id": ctx.HTTP.Auth.UserID,
})Навигация И Redirect
Если пользователь открывает защищённый HTML-trigger обычной навигацией браузера и ещё не вошёл, host делает redirect на:
/api/auth/tsu/start?return_to=<текущий-path-and-query>Для API/fetch-запросов host не редиректит, а возвращает 401, чтобы frontend мог сам показать экран входа.
User Bearer Token
Для небраузерных клиентов можно выпустить user bearer token из уже существующей user_session:
POST /api/auth/tokens
Content-Type: application/json
Cookie: user_session=...
{"name":"CLI token"}Дальше HTTP-trigger вызывается так:
Authorization: Bearer sbuk_<public>.<secret>Такой token даёт principal user и проходит через те же настройки trigger'а и policy expression.
Что Не Нужно Делать
- Не используйте
admin_sessionдля frontend'ов плагинов. - Не храните TSU token во frontend'е.
- Не используйте service-key в браузере: service-key предназначен для server-to-server интеграций.
- Не считайте вход через ТГУ правом доступа: доступ задаётся настройками trigger'а и policy.