Credential service изолирует хранение и проверку credentials. Сервис обеспечивает, чтобы пароли и другие чувствительные секреты не смешивались с identity, account и публичными API.
Ключевая роль:
- хранение хэшей паролей и других credentials;
- проверка credentials по внутреннему контракту;
- минимизация поверхности атаки и снижение риска утечек.
Интерфейсы и связи:
- внутренний протокол:
gRPC; - upstream:
Auth Service; - downstream:
Identity service.
Разделы
- Код:
services/auth/credential-service/ - Язык: Python 3.12+
- Протокол: gRPC (internal only)
- Proto:
proto/aiops/credential/v1/credential.proto - Приоритет: HIGH
- Владелец: Алексей Шалаев
- Статус: В разработке
Архитектура
Clean Architecture Layers
Core (core/):
- password/ — PasswordCredential aggregate (User ID, Password Hash, Must Change flag)
- Domain Services:
- PasswordDomainService — хеширование паролей (Argon2id), валидация сложности (zxcvbn)
Use Cases (use_cases/):
- SetPasswordUseCase — установка нового пароля (регистрация)
- VerifyPasswordUseCase — проверка пароля (вход) — constant-time verification
- ChangePasswordUseCase — смена пароля (требует старый пароль)
- ResetPasswordUseCase — сброс пароля (без старого пароля, требует verification)
Infrastructure (infra/):
- PostgreSQL для хранения password hashes
- Redis для rate limiting (защита от brute-force)
- Kafka для публикации событий через Transactional Outbox
API (api/servicers/v1/):
- gRPC servicers (internal only, не публичные)
Безопасность
Password Hashing
- Алгоритм: Argon2id (рекомендация OWASP)
- Параметры: time_cost=2, memory_cost=65536, parallelism=1
- Библиотека:
argon2-cffi
Password Validation
- Strength checker: zxcvbn-python
- Минимальный score: 3 из 5
- Требования: минимум 1 специальный символ
Timing Attack Protection
- Constant-time verification — время проверки не зависит от результата
- Защита от timing-based attacks при brute-force
Rate Limiting
- Redis-based rate limiting для защиты от brute-force
- Автоматическая блокировка после N неудачных попыток
События
Сервис публикует события в Kafka:
credential.password.events
| Event Type | Описание | Payload |
|---|---|---|
| PASSWORD_SET | Новый пароль установлен (регистрация) | { user_id, must_change, created_at } |
| PASSWORD_CHANGED | Пароль изменен пользователем | { user_id, changed_at } |
| PASSWORD_VERIFIED | Успешная проверка пароля (логин) | { user_id, verified_at } |
| PASSWORD_VERIFICATION_FAILED | Неудачная проверка пароля | { user_id, failed_at, attempts_count } |
Consumers:
- Account service — может обновлять password_changed_at timestamp
- Security monitoring — отслеживает failed attempts
Зависимости
Uses (downstream)
- Identity service — получает User ID для привязки password
Used by (upstream)
- Auth Service — вызывает SetPassword, VerifyPassword
Data Stores
- PostgreSQL —
credential_db(password_credentials, password_history) - Redis — rate limiting counters
- Kafka — event publishing
Паттерны
- Transactional Outbox — события сохраняются в
outbox_events - Unit of Work — все операции через UoW
- Repository Pattern —
PostgresPasswordRepository - Domain Service —
PasswordDomainService(Argon2, zxcvbn)
Связанные страницы
Фичи
- Authentication Feature — Credential service реализует password verification
Архитектура
- Security Architecture / Secrets Management — как хранятся пароли
- Security Architecture / Authentication — роль в auth chain
Сервисы
- Auth Service — оркестрирует использование credentials
- Identity service — canonical User ID
- Herald — отправка уведомлений о смене пароля
Инженерия
- Backend / Error Handling — обработка ошибок при проверке
- Event-Driven Patterns — Transactional Outbox
Каталог
- Service Catalog — полный список сервисов