106 lines
4.1 KiB
Markdown
106 lines
4.1 KiB
Markdown
|
|
# 🔐 Система аутентификации Discours Core
|
|||
|
|
|
|||
|
|
## 📚 Обзор
|
|||
|
|
|
|||
|
|
Модульная система аутентификации с JWT токенами, Redis-сессиями, OAuth интеграцией и RBAC авторизацией. Поддерживает httpOnly cookies и Bearer токены для веб и API клиентов.
|
|||
|
|
|
|||
|
|
## 🚀 Быстрый старт
|
|||
|
|
|
|||
|
|
### Для микросервисов
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from auth.tokens.sessions import SessionTokenManager
|
|||
|
|
from auth.utils import extract_token_from_request
|
|||
|
|
|
|||
|
|
# Проверка токена
|
|||
|
|
sessions = SessionTokenManager()
|
|||
|
|
token = await extract_token_from_request(request)
|
|||
|
|
payload = await sessions.verify_session(token)
|
|||
|
|
|
|||
|
|
if payload:
|
|||
|
|
user_id = payload.get("user_id")
|
|||
|
|
print(f"Пользователь авторизован: {user_id}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Redis ключи для поиска
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Сессии пользователей
|
|||
|
|
session:{user_id}:{token} # Данные сессии (hash)
|
|||
|
|
user_sessions:{user_id} # Список активных токенов (set)
|
|||
|
|
|
|||
|
|
# OAuth токены
|
|||
|
|
oauth_access:{user_id}:{provider} # Access токен
|
|||
|
|
oauth_refresh:{user_id}:{provider} # Refresh токен
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📖 Документация
|
|||
|
|
|
|||
|
|
### 🏗️ Архитектура
|
|||
|
|
- **[Обзор системы](system.md)** - Компоненты и менеджеры токенов
|
|||
|
|
- **[Архитектура](architecture.md)** - Диаграммы и потоки данных
|
|||
|
|
- **[Миграция](migration.md)** - Обновление с предыдущих версий
|
|||
|
|
|
|||
|
|
### 🔑 Аутентификация
|
|||
|
|
- **[Управление сессиями](sessions.md)** - JWT токены и Redis хранение
|
|||
|
|
- **[OAuth интеграция](oauth.md)** - Социальные провайдеры
|
|||
|
|
- **[Микросервисы](microservices.md)** - 🎯 **Интеграция с другими сервисами**
|
|||
|
|
|
|||
|
|
### 🛠️ Разработка
|
|||
|
|
- **[API Reference](api.md)** - Методы и примеры кода
|
|||
|
|
- **[Безопасность](security.md)** - Лучшие практики
|
|||
|
|
- **[Тестирование](testing.md)** - Unit и E2E тесты
|
|||
|
|
|
|||
|
|
### 🔗 Связанные системы
|
|||
|
|
- **[RBAC System](../rbac-system.md)** - Система ролей и разрешений
|
|||
|
|
- **[Security System](../security.md)** - Управление паролями и email
|
|||
|
|
- **[Redis Schema](../redis-schema.md)** - Схема данных и кеширование
|
|||
|
|
|
|||
|
|
## 🔍 Для микросервисов
|
|||
|
|
|
|||
|
|
### Подключение к Redis
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Используйте тот же Redis connection pool
|
|||
|
|
from storage.redis import redis
|
|||
|
|
|
|||
|
|
# Проверка сессии
|
|||
|
|
async def check_user_session(token: str) -> dict | None:
|
|||
|
|
sessions = SessionTokenManager()
|
|||
|
|
return await sessions.verify_session(token)
|
|||
|
|
|
|||
|
|
# Массовая проверка токенов
|
|||
|
|
from auth.tokens.batch import BatchTokenOperations
|
|||
|
|
batch = BatchTokenOperations()
|
|||
|
|
results = await batch.batch_validate_tokens(token_list)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### HTTP заголовки
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# Извлечение токена из запроса
|
|||
|
|
from auth.utils import extract_token_from_request, get_safe_headers
|
|||
|
|
|
|||
|
|
token = await extract_token_from_request(request)
|
|||
|
|
|
|||
|
|
# Или вручную
|
|||
|
|
headers = get_safe_headers(request)
|
|||
|
|
token = headers.get("authorization", "").replace("Bearer ", "")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 Основные компоненты
|
|||
|
|
|
|||
|
|
- **SessionTokenManager** - JWT сессии с Redis хранением
|
|||
|
|
- **OAuthTokenManager** - OAuth access/refresh токены
|
|||
|
|
- **BatchTokenOperations** - Массовые операции с токенами
|
|||
|
|
- **TokenMonitoring** - Мониторинг и статистика
|
|||
|
|
- **AuthMiddleware** - HTTP middleware для автоматической обработки
|
|||
|
|
|
|||
|
|
## ⚡ Производительность
|
|||
|
|
|
|||
|
|
- **Connection pooling** для Redis
|
|||
|
|
- **Batch операции** для массовых действий (100-1000 токенов)
|
|||
|
|
- **Pipeline использование** для атомарности
|
|||
|
|
- **SCAN** вместо KEYS для безопасности
|
|||
|
|
- **TTL** автоматическая очистка истекших токенов
|