Обзор

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 при подозрении на компрометацию аккаунта
  • Не логируйте токены в консоль или файлы
  • Проверяйте силу пароля на клиенте перед отправкой