Аутентификация
JWT токены для безопасного доступа к API
Обзор
Enot Messenger использует JWT (JSON Web Tokens) для аутентификации. Токены имеют срок действия 30 дней для удобства пользователей.
- JWT токены с 30-дневным сроком действия
- HttpOnly cookies для веб-приложения
- Bearer токены для мобильных приложений
- Token revocation через Redis blacklist
- Bcrypt для хеширования паролей (cost 12)
Регистрация
Создание нового аккаунта.
Endpoint
POST /api/auth/register
Request Body
{
"username": "myusername",
"email": "user@example.com",
"password": "SecurePassword123!"
}
Требования к паролю
- Минимум 12 символов
- Хотя бы одна заглавная буква (A-Z)
- Хотя бы одна строчная буква (a-z)
- Хотя бы одна цифра (0-9)
- Хотя бы один специальный символ (!@#$%^&*)
- Не должен быть в списке распространенных паролей
Response (201 Created)
{
"user": {
"id": 1,
"username": "myusername",
"email": "user@example.com",
"display_name": "User#1234",
"created_at": "2026-05-05T18:00:00Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Rate Limit: 3 регистрации в час с одного IP
Вход (Login)
Вход в существующий аккаунт. Поддерживается вход по username или email.
Endpoint
POST /api/auth/login
Request Body (username)
{
"username": "myusername",
"password": "SecurePassword123!"
}
Request Body (email)
{
"email": "user@example.com",
"password": "SecurePassword123!"
}
Response (200 OK)
{
"user": {
"id": 1,
"username": "myusername",
"email": "user@example.com",
"display_name": "User#1234",
"created_at": "2026-05-05T18:00:00Z"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Rate Limit: 5 попыток входа за 15 минут
Использование токена
После получения токена, передавайте его в заголовке Authorization для всех защищенных endpoints.
Authorization Header
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Пример запроса (cURL)
curl -X GET https://api.enot.space/api/auth/me \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
Пример запроса (JavaScript)
const response = await fetch('https://api.enot.space/api/auth/me', {
headers: {
'Authorization': `Bearer ${token}`
}
});
const user = await response.json();
Получить текущего пользователя
Получить информацию о текущем авторизованном пользователе.
Endpoint
GET /api/auth/me
Response (200 OK)
{
"id": 1,
"username": "myusername",
"email": "user@example.com",
"display_name": "User#1234",
"created_at": "2026-05-05T18:00:00Z",
"updated_at": "2026-05-05T18:00:00Z"
}
Выход (Logout)
Отзыв токена и выход из системы.
Logout (текущая сессия)
POST /api/auth/logout
Logout All (все сессии)
POST /api/auth/logout-all
Response (200 OK)
{
"message": "Logged out successfully"
}
Token Revocation: Токены добавляются в Redis blacklist и становятся недействительными немедленно.
Обновить Display Name
Изменить отображаемое имя пользователя (видно всем).
Endpoint
PUT /api/auth/display-name
Request Body
{
"display_name": "MyNewName#1234"
}
Response (200 OK)
{
"id": 1,
"username": "myusername",
"email": "user@example.com",
"display_name": "MyNewName#1234",
"created_at": "2026-05-05T18:00:00Z",
"updated_at": "2026-05-05T19:00:00Z"
}
Privacy: Username виден только владельцу аккаунта. Display name показывается всем пользователям.
Best Practices
- Храните токены в безопасном месте (localStorage для веб, Keychain для iOS, KeyStore для Android)
- Никогда не передавайте токены через URL параметры
- Используйте HTTPS для всех запросов
- Реализуйте автоматический refresh при истечении токена
- Используйте logout-all при подозрении на компрометацию аккаунта
- Не логируйте токены в консоль или файлы
- Проверяйте силу пароля на клиенте перед отправкой