2.9 KiB
2.9 KiB
JWT Аутентификация — AegisGuard API
Схема работы
- access_token — JWT, живёт 24 часа. Передаётся в заголовке
Authorization: Bearer. - refresh_token — случайная строка, хранится в БД в виде хеша. Используется один раз (ротация): при запросе новой пары старый токен удаляется.
- Регистрация сразу возвращает токены — отдельный логин не нужен.
Эндпоинты
POST /api/auth/register
Создание аккаунта.
Запрос:
{ "username": "john", "email": "john@example.com", "password": "Secret123" }
Ответ 201:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=",
"user": {
"id": "uuid",
"username": "john",
"email": "john@example.com",
"created_at": "2026-06-13T12:00:00Z"
}
}
username— 3–30 символовemail— валидный emailpassword— минимум 8 символов, обязательно заглавная + строчная + цифра
Ошибки: 400 (валидация), 409 (email уже занят).
POST /api/auth/login
Запрос:
{ "email": "john@example.com", "password": "Secret123" }
Ответ 200:
{ "token": "...", "refresh_token": "...", "user": { ... } }
Rate limit: 10 попыток в минуту с одного IP (429 Too Many Requests).
POST /api/auth/refresh
Обновить токены по refresh_token. Старый удаляется, выдаётся новая пара.
Запрос:
{ "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=" }
Ответ 200:
{ "token": "...", "refresh_token": "...", "user": { ... } }
POST /api/auth/logout
Удалить refresh_token из БД.
Запрос:
{ "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4=" }
Ответ 200:
{ "message": "logged out successfully" }
Заголовок авторизации
Authorization: Bearer <access_token>
Формат JWT
{
"user_id": "uuid",
"email": "john@example.com",
"sub": "uuid",
"exp": 1718000000,
"iat": 1717913600
}
user_id— UUID пользователяemail— Email пользователяsub— то же, чтоuser_idexp— Unix-timestamp истечения токенаiat— Unix-timestamp выпуска токена
Формат ошибок
{ "error": "описание" }
400— ошибка валидации401— неверный email/пароль, токен протух или невалиден409— email уже зарегистрирован429— превышен лимит попыток логина500— внутренняя ошибка сервера