Repository navigation
Service Identity
plutogr edited this page Mar 15, 2026
·
1 revision
Сервис идентификации и аутентификации: регистрация, вход, JWT, refresh-токены, профиль пользователя и роли. Единственный сервис, хранящий пароли (в хэшированном виде).
- Назначение и роль
- Стек и зависимости
- Структура проектов
- Домен
- API (HTTP)
- gRPC
- Инфраструктура
- Безопасность
- Конфигурация и запуск
- Регистрация и логин пользователей.
- Выдача JWT access и refresh токенов; обновление пары по refresh-токену.
- Выход (инвалидация refresh-токена).
- Профиль: получение и обновление данных текущего пользователя (имя, фамилия, телефон).
- Роли: Client, Manager, Admin — хранятся в сущности User и попадают в JWT claims; остальные сервисы и Gateway доверяют этим данным.
- gRPC: метод GetUserSummary — для других сервисов (например, Booking) для получения краткой информации о пользователе по Id.
Собственная БД: travel_identity (PostgreSQL). Пароли хранятся в виде хэша (BCrypt/аналог через инфраструктурный сервис).
| Компонент | Технология |
|---|---|
| Платформа | .NET 10, ASP.NET Core |
| БД | PostgreSQL, EF Core |
| Медиатор | MediatR (команды/запросы) |
| Валидация | FluentValidation |
| JWT | Microsoft.AspNetCore.Authentication.JwtBearer |
| Rate limiting | встроенный RateLimiter (sliding window по IP) |
| Логирование | Serilog |
| Трейсинг | OpenTelemetry |
| Общее | TravelAgency.Shared.Contracts, TravelAgency.Shared.Infrastructure, TravelAgency.Contracts.Grpc |
src/Services/Identity/
├── TravelAgency.Identity.Domain/ # Сущности, роли, интерфейсы репозиториев
├── TravelAgency.Identity.Application/ # Команды, запросы, DTO, валидаторы, поведение
├── TravelAgency.Identity.Infrastructure/ # DbContext, репозитории, JWT, хэширование, gRPC-сервер
├── TravelAgency.Identity.API/ # Контроллеры, middleware, конфигурация хоста
├── TravelAgency.Identity.UnitTests/
└── TravelAgency.Identity.IntegrationTests/
- User — Id, Email, PasswordHash, FirstName, LastName, Phone?, Role (enum), CreatedAt, UpdatedAt. Фабричный метод Create; методы UpdateProfile, ChangePassword.
- RefreshToken — хранение refresh-токенов с привязкой к пользователю и сроку действия.
- UserRole — enum: Client, Manager, Admin.
- Интерфейсы: IUserRepository, IRefreshTokenRepository (в Domain); реализация — в Infrastructure.
Базовый маршрут: /identity (через Gateway: /api/v1/auth/* маппится на Identity с префиксом /identity).
| Метод | Путь | Доступ | Описание |
|---|---|---|---|
| POST | /identity/register | Anonymous | Регистрация; возвращает AuthTokensDto (access + refresh). |
| POST | /identity/login | Anonymous | Вход; возвращает AuthTokensDto. |
| POST | /identity/refresh | Anonymous | Обновление пары токенов по refresh. |
| POST | /identity/logout | Authorized | Инвалидация refresh-токена. |
| GET | /identity/me | Authorized | Профиль текущего пользователя. |
| PATCH | /identity/me | Authorized | Обновление профиля (имя, фамилия, телефон). |
На эндпоинты register/login/refresh применяется rate limiting (политика "auth" — sliding window по IP). Ошибки возвращаются в формате ProblemDetails; конфликт по email при регистрации — 409.
- Сервис: IdentityGrpc (пакет identity).
- Метод: GetUserSummary(GetUserSummaryRequest) → UserSummaryResponse (user_id, email, first_name, last_name, role).
- Вызывается другими сервисами (например, Booking) с внутренним токеном (GrpcAuthInterceptor). Регистрация в API: MapGrpcService<IdentityGrpcService>.
- IdentityDbContext — наборы User, RefreshToken; миграции в Infrastructure.
- UserRepository, RefreshTokenRepository — реализация репозиториев Domain.
- JwtTokenService — генерация access/refresh, валидация.
- PasswordHasherService — хэширование паролей (без хранения в открытом виде).
- Lockout — опционально InMemoryLockoutService для защиты от брутфорса (настраивается).
- При старте: опциональное применение миграций (UseIdentityMigrations), если задана переменная окружения.
- Пароли только в хэшированном виде.
- JWT: подпись, Issuer/Audience, срок жизни; роль в claim для авторизации в Gateway и в других сервисах.
- Rate limiting на auth-эндпоинтах.
- CORS и ForwardedHeaders настроены для работы за Gateway.
- PII (персональные данные) при необходимости маскируются в логах (PiiMaskingDestructuringPolicy).
- ConnectionStrings:IdentityDb — строка подключения к PostgreSQL (БД travel_identity).
- JwtSettings — SigningKey (≥32 символа), Issuer, Audience, срок жизни токенов.
- GrpcSettings:InternalServiceToken — токен для вызовов gRPC от других сервисов (обязателен в Docker).
- В Docker Compose: сервис identity-service, порт 5010→8080, зависит от postgres (health). Переменная ASPNETCORE_RUN_MIGRATIONS=true для применения миграций при старте.
См. также: Архитектура, Сервис API Gateway.
- Обзор проекта
- Архитектура и зависимости
- API-карта
- Gateway
- Identity
- Catalog
- Booking
- Chat
- Media
- gRPC контракты
- Архитектура
- Детали реализации
- Сервис API Gateway
- Сервис Identity
- Сервис Catalog
- ADR-001. Модель тура
- Сервис Booking
- Сервис Chat
- Сервис Media
- Содержимое сайта
- Стек и версии
- Глоссарий
- Соответствие экранов и API