Auth & Identity Service
Центр управления доступом, Keycloak и профили пользователей
Auth & Identity Service (Готов ✅)
Статус: Полностью реализован. Интегрирован с Keycloak и шиной событий Kafka.
Auth & Identity Service (apps/services/auth) — это объединенный микросервис, который является "точкой входа" для управления безопасностью и данными участников платформы Манитон. Он интегрирует Keycloak в качестве Identity Provider (IdP) и расширяет его доменной логикой ЦФА.
Почему они объединены?
В архитектуре Манитон аутентификация (кто вы?) и идентификация (ваш KYC статус и лимиты) неразрывно связаны. Объединение в один сервис позволяет:
- Атомарно управлять учетной записью: создание пользователя в Keycloak одновременно инициализирует его профиль и лимиты в нашей системе.
- Снизить задержки: RBAC-проверки (права доступа) учитывают как роли из Keycloak, так и флаги комплаенса из локальной БД.
- Единый API: Другие сервисы (например, CFA-Core) обращаются к одному узлу для валидации запроса.
Основные компоненты
1. Интеграция с Keycloak
Сервис инкапсулирует работу с Keycloak через Admin Client и OpenID Connect:
- Token Validation: Проверка подписи JWT через JWKS (JSON Web Key Set).
- Auto-Bootstrap: Автоматическое создание Realm, Client и базовых ролей (
investor,compliance_officer,admin) при первом запуске. - Sync: Синхронизация данных пользователя (email, phone) между Keycloak и локальной PostgreSQL.
2. Identity (Идентификация и KYC)
Управление расширенными данными, которые не хранятся в Keycloak:
- KYC Cases: Жизненный цикл заявок на верификацию (загрузка документов, ручная проверка, статус).
- Limits (259-ФЗ): Контроль остатков лимитов на операции (например, 600к/мес для определенных уровней).
- Sanctions & Scoring: Интеграция с внешними провайдерами для проверки по черным спискам.
3. Authz (Авторизация и RBAC)
- Role Mapping: Управление ролями Keycloak (
investor,trader,support_agent,system_admin,treasury_manager,compliance_officer). - Permissions: Проверка разрешений на выполнение конкретных действий (например,
CFA_ISSUE,USERS_BLOCK). - Protection: Декораторы NestJS для защиты Kafka-обработчиков (
@RequirePermissions).
Технологический стек
- NestJS: Основной фреймворк.
- Keycloak: Внешний IdP.
- Drizzle ORM: Работа с PostgreSQL.
- BullMQ: Очереди задач для асинхронных проверок (санкции, риск-скоринг).
- Kafka: RPC-интерфейс и публикация событий.
Схема данных (Drizzle)
Kafka RPC API
| Метод | Описание |
|---|---|
authz.validateToken | Проверка токена и получение профиля с правами. |
identity.submitKyc | Подача документов на верификацию. |
identity.getUserLimits | Получение текущих лимитов пользователя. |
identity.listUsers | Поиск по базе пользователей (для админов). |
События
Сервис гарантирует доставку событий через Outbox Pattern:
UserCreated: При первой авторизации через Keycloak.KycStatusChanged: После одобрения заявки офицером.UserBlocked: Экстренная блокировка по AML.