# 🔐 Документация по системе аутентификации WebSocket ## Проблема с токеном `temp_token_for_shadow85@list.ru` ### Что это было? Токен `temp_token_for_shadow85@list.ru` - это **НЕ настоящий JWT токен**, а временная строка, которую мобильное приложение отправляло для тестирования. ### Откуда появился? 1. **Мобильное приложение** создавало временный токен в формате: `temp_token_for_{email}` 2. **Отправляло в заголовке**: `Authorization: Bearer temp_token_for_shadow85@list.ru` 3. **WebSocket ранее принимал** такие токены (возможно, была заглушка) ### Что было исправлено? 1. **Добавлена защита** от временных токенов в `get_current_user_websocket()` 2. **Блокировка токенов**, начинающихся с `temp_token` или `test_token` 3. **Улучшенное логирование** для отладки аутентификации ## Правильная система аутентификации ### 1. Получение JWT токена ```http POST /api/v1/auth/login Content-Type: application/json { "email": "shadow85@list.ru", "password": "R0sebud1985" } ``` **Ответ:** ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "bearer", "user": { "id": 2, "email": "shadow85@list.ru" } } ``` ### 2. Структура JWT токена **Заголовок (Header):** ```json { "alg": "HS256", "typ": "JWT" } ``` **Содержимое (Payload):** ```json { "sub": "2", // ID пользователя "email": "shadow85@list.ru", // Email пользователя "exp": 1760732009 // Время истечения (15 минут) } ``` **Подпись (Signature):** ``` HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), SECRET_KEY ) ``` ### 3. WebSocket подключение **Правильный URL:** ``` ws://localhost:8002/api/v1/emergency/ws/current_user_id?token=JWT_TOKEN_HERE ``` **Пример:** ``` ws://localhost:8002/api/v1/emergency/ws/current_user_id?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` ## Безопасность ### ✅ Что РАЗРЕШЕНО: - Настоящие JWT токены с валидной подписью - Токены в пределах срока действия (15 минут) - Токены с корректным `user_id` и `email` ### ❌ Что ЗАБЛОКИРОВАНО: - Токены, начинающиеся с `temp_token_` - Токены, начинающиеся с `test_token_` - Невалидные JWT токены - Истёкшие токены - Токены без подписи ### Логи безопасности: **При блокировке временного токена:** ``` ❌ WebSocket auth: REJECTED - Temporary tokens not allowed in production! ❌ Token prefix: temp_token_for_shadow... ``` **При успешной аутентификации:** ``` ✅ WebSocket auth: JWT token valid for user_id=2, email=shadow85@list.ru ``` ## Исправления для мобильного приложения ### ❌ НЕПРАВИЛЬНО (старый код): ```kotlin // Временная заглушка - НЕ ИСПОЛЬЗОВАТЬ! val tempToken = "temp_token_for_${userEmail}" headers["Authorization"] = "Bearer $tempToken" ``` ### ✅ ПРАВИЛЬНО (новый код): ```kotlin // 1. Сначала авторизуемся val loginResponse = apiService.login( LoginRequest(email = userEmail, password = userPassword) ) // 2. Сохраняем JWT токен val jwtToken = loginResponse.access_token sharedPreferences.edit() .putString("jwt_token", jwtToken) .apply() // 3. Используем JWT токен для WebSocket val wsUrl = "ws://server:8002/api/v1/emergency/ws/current_user_id?token=$jwtToken" ``` ## Проверка работы системы ### Тест безопасности: ```bash ./venv/bin/python test_security_check.py ``` **Ожидаемый результат:** ``` ✅ ВСЕ ТЕСТЫ БЕЗОПАСНОСТИ ПРОЙДЕНЫ! ✅ Временные токены корректно блокируются ✅ JWT токены корректно принимаются 🔒 Система готова к продакшену ``` ### Тест правильной аутентификации: ```bash ./venv/bin/python test_proper_authentication.py ``` ## Результаты тестирования ### 🛡️ Полный комплексный тест системы Запуск: `./venv/bin/python test_final_security.py` **Результат:** ``` 🎯 ОБЩИЙ РЕЗУЛЬТАТ: 4/4 тестов пройдено 🚀 СИСТЕМА ГОТОВА К ПРОДАКШЕНУ! ✅ Все аспекты безопасности и функциональности работают корректно ``` ### ✅ Пройденные тесты: 1. **🔒 Безопасность временных токенов** - Все temp_token токены корректно отклоняются - Защита от небезопасных токенов работает 2. **🔐 JWT аутентификация** - Авторизация через `/api/v1/auth/login` работает - JWT токены корректно создаются и принимаются - WebSocket подключения с JWT работают 3. **⚙️ Базовая функциональность** - Health check endpoint работает - WebSocket подключения стабильны - Система готова для основной функциональности 4. **🛡️ Безопасность WebSocket** - Пустые токены отклоняются - Неверные токены отклоняются - Только валидные JWT токены принимаются ## Заключение 1. **✅ Проблема решена**: Временные токены `temp_token_for_*` теперь блокируются 2. **✅ Безопасность обеспечена**: Только валидные JWT токены принимаются 3. **✅ Логирование улучшено**: Подробные логи для отладки аутентификации 4. **✅ Система протестирована**: Все критические компоненты работают 5. **🚀 Система готова**: К продакшен-развертыванию ### Следующие шаги: 1. **Обновить мобильное приложение** - использовать настоящие JWT токены 2. **Удалить временные токены** из клиентского кода 3. **Протестировать интеграцию** между мобильным приложением и сервером 4. **Развернуть в продакшене** - система безопасна и готова ### Файлы тестирования: - `test_final_security.py` - Полный комплексный тест - `test_proper_authentication.py` - Тест правильной аутентификации - `test_security_check.py` - Расширенный тест с API endpoints