All checks were successful
Deploy on push / deploy (push) Successful in 9m43s
### Fixed - 🔒 **OAuth Facebook**: Обновлена версия API с v13.0 до v18.0 (актуальная) - 🔒 **OAuth Facebook**: Добавлены обязательные scope и параметры безопасности - 🔒 **OAuth Facebook**: Улучшена обработка ошибок API и валидация ответов - 🔒 **OAuth VK**: Обновлена версия API с v5.131 до v5.199+ (актуальная) - 🔒 **OAuth VK**: Исправлен endpoint с `authors.get` на `users.get` - 🔒 **OAuth GitHub**: Добавлены обязательные scope `read:user user:email` - 🔒 **OAuth GitHub**: Улучшена обработка ошибок и получения email адресов - 🔒 **OAuth Google**: Добавлены обязательные scope для OpenID Connect - 🔒 **OAuth X/Twitter**: Исправлен endpoint с `authors/me` на `users/me` - 🔒 **Session Cookies**: Автоматическое определение HTTPS через переменную окружения HTTPS_ENABLED - 🏷️ **Type Safety**: Исправлена ошибка в OAuth регистрации провайдеров
🔐 Система аутентификации Discours Core
📚 Обзор
Модульная система аутентификации с JWT токенами, Redis-сессиями, OAuth интеграцией и RBAC авторизацией. Поддерживает httpOnly cookies и Bearer токены для веб и API клиентов.
🚀 Быстрый старт
Для микросервисов
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 ключи для поиска
# Сессии пользователей
session:{user_id}:{token} # Данные сессии (hash)
user_sessions:{user_id} # Список активных токенов (set)
# OAuth токены
oauth_access:{user_id}:{provider} # Access токен
oauth_refresh:{user_id}:{provider} # Refresh токен
📖 Документация
🏗️ Архитектура
- Обзор системы - Компоненты и менеджеры токенов
- Архитектура - Диаграммы и потоки данных
- Миграция - Обновление с предыдущих версий
🔑 Аутентификация
- Управление сессиями - JWT токены и Redis хранение
- OAuth интеграция - Социальные провайдеры
- Микросервисы - 🎯 Интеграция с другими сервисами
🛠️ Разработка
- API Reference - Методы и примеры кода
- Безопасность - Лучшие практики
- Тестирование - Unit и E2E тесты
🔗 Связанные системы
- RBAC System - Система ролей и разрешений
- Security System - Управление паролями и email
- Redis Schema - Схема данных и кеширование
🔍 Для микросервисов
Подключение к Redis
# Используйте тот же 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 заголовки
# Извлечение токена из запроса
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 автоматическая очистка истекших токенов