Skip to content

Service Identity

plutogr edited this page Mar 15, 2026 · 1 revision

Сервис Identity (TravelAgency.Identity)

Сервис идентификации и аутентификации: регистрация, вход, JWT, refresh-токены, профиль пользователя и роли. Единственный сервис, хранящий пароли (в хэшированном виде).


Содержание

  1. Назначение и роль
  2. Стек и зависимости
  3. Структура проектов
  4. Домен
  5. API (HTTP)
  6. gRPC
  7. Инфраструктура
  8. Безопасность
  9. Конфигурация и запуск

1) Назначение и роль

  • Регистрация и логин пользователей.
  • Выдача JWT access и refresh токенов; обновление пары по refresh-токену.
  • Выход (инвалидация refresh-токена).
  • Профиль: получение и обновление данных текущего пользователя (имя, фамилия, телефон).
  • Роли: Client, Manager, Admin — хранятся в сущности User и попадают в JWT claims; остальные сервисы и Gateway доверяют этим данным.
  • gRPC: метод GetUserSummary — для других сервисов (например, Booking) для получения краткой информации о пользователе по Id.

Собственная БД: travel_identity (PostgreSQL). Пароли хранятся в виде хэша (BCrypt/аналог через инфраструктурный сервис).


2) Стек и зависимости

Компонент Технология
Платформа .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

3) Структура проектов

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/

4) Домен

  • 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.

5) API (HTTP)

Базовый маршрут: /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.


6) gRPC

  • Сервис: IdentityGrpc (пакет identity).
  • Метод: GetUserSummary(GetUserSummaryRequest) → UserSummaryResponse (user_id, email, first_name, last_name, role).
  • Вызывается другими сервисами (например, Booking) с внутренним токеном (GrpcAuthInterceptor). Регистрация в API: MapGrpcService<IdentityGrpcService>.

7) Инфраструктура

  • IdentityDbContext — наборы User, RefreshToken; миграции в Infrastructure.
  • UserRepository, RefreshTokenRepository — реализация репозиториев Domain.
  • JwtTokenService — генерация access/refresh, валидация.
  • PasswordHasherService — хэширование паролей (без хранения в открытом виде).
  • Lockout — опционально InMemoryLockoutService для защиты от брутфорса (настраивается).
  • При старте: опциональное применение миграций (UseIdentityMigrations), если задана переменная окружения.

8) Безопасность

  • Пароли только в хэшированном виде.
  • JWT: подпись, Issuer/Audience, срок жизни; роль в claim для авторизации в Gateway и в других сервисах.
  • Rate limiting на auth-эндпоинтах.
  • CORS и ForwardedHeaders настроены для работы за Gateway.
  • PII (персональные данные) при необходимости маскируются в логах (PiiMaskingDestructuringPolicy).

9) Конфигурация и запуск

  • 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.

Clone this wiki locally