auth.md 4.7 KB

AuthService

Назначение

AuthService обеспечивает аутентификацию и авторизацию пользователей. Основной сценарий входа - по номеру телефона с подтверждением через SMS или flash-call. Сервис управляет жизненным циклом сессий и выпускает сессионные токены для доступа к остальным микросервисам.

Публичные методы AuthService

  • TryAuthByPhoneAsync(phone): string - инициация входа: генерация sid, отправка кода подтверждения.
  • ConfirmAuthCodeAsync(code): string - проверка кода из SMS и подтверждение телефона и sid.
  • CheckAuthOrEmptyAsync(withRefresh): string - выпуск authtoken либо пустой строки.
  • TryChangePhoneAsync(phone): User - смена привязанного к пользователю номера телефона.
  • DropAuthSessionAsync(): void - завершение сессии.

Взаимодействие с ProfilesService

[AuthService] -> [ProfilesService]

AuthService сам не хранит данных о пользователях и делегирует работу с профилями в ProfilesService. После подтверждения номера телефона AuthService взаимодействует с ProfilesService:

  1. Изменение телефона пользователя:

    var user = await profiles.ChangeUserPhoneAsync(session.UserId, tryCodes.Auth.Data);
    
  2. Проверка и создание пользователя по номеру:

    var user = await profiles.GetUserOrNullByPhoneAsync(tryCodes.Auth.Data);
    user ??= await profiles.CreateUserByPhoneAsync(tryCodes.Auth.Data);
    

AuthService отвечает за подтверждение личности, а ProfilesService - за хранение и управление данными профиля. Их связка гарантирует, что любая успешная авторизация всегда соответствует реальной записи пользователя в системе.

Модели

AuthSession

AuthService хранит все пользовательские сессии в моделе AuthSession. Активные сессии кэшируются в словарях сервиса, остальные хранятся в SQLite.

string Sid – идентификатор сессии (session id)
long UserId – идентификатор пользователя, к которому относится сессия
DateTimeOffset Created – дата и время создания сессии
DateTimeOffset LastActive – время последней активности
AuthToken? AuthToken – выданный токен аутентификации для этой сессии
bool IsDeleted – признак, что сессия удалена

AuthToken

Модель описывающая доступы (права) пользователя. Имеет цифровую подпись сервиса выдавшего его, сроки годности. Через CheckAuthOrEmptyAsync можно запросить новый токен. Сервис по SID поймет какой пользователь делает запрос и выдаст новый токен.

long UserId – идентификатор пользователя, для которого выпущен токен
Access[] Accesses – список доступов (прав и ролей) пользователя
long CreatedUnixMS – время создания токена в Unix-миллисекундах
long UntilUnixMS – время окончания действия токена в Unix-миллисекундах
string Sign – криптографическая подпись токена

Access

AccessTypeEnum Type – тип доступа (роль/право)
string Data – дополнительная строка данных (контекст доступа)
DateTimeOffset UntilTime – время окончания действия доступа

DB

Содержит таблицы и индексы

-- Migration 1
sessions (
    Sid TEXT UNIQUE PRIMARY KEY, --Сессионный ключ, который передается в Headers
    UserId INTEGER DEFAULT 0,
    Created NUMERIC DEFAULT 0,
    LastActive NUMERIC DEFAULT 0,
    AuthToken TEXT NOT NULL, --Текущий токен доступа
    IsDeleted BOOLEAN DEFAULT FALSE
)

Назад