AuthService обеспечивает аутентификацию и авторизацию пользователей. Основной сценарий входа - по номеру телефона с подтверждением через SMS или flash-call. Сервис управляет жизненным циклом сессий и выпускает сессионные токены для доступа к остальным микросервисам.
TryAuthByPhoneAsync(phone): string - инициация входа: генерация sid, отправка кода подтверждения.ConfirmAuthCodeAsync(code): string - проверка кода из SMS и подтверждение телефона и sid.CheckAuthOrEmptyAsync(withRefresh): string - выпуск authtoken либо пустой строки.TryChangePhoneAsync(phone): User - смена привязанного к пользователю номера телефона.DropAuthSessionAsync(): void - завершение сессии.[AuthService] -> [ProfilesService]
AuthService сам не хранит данных о пользователях и делегирует работу с профилями в ProfilesService. После подтверждения номера телефона AuthService взаимодействует с ProfilesService:
Изменение телефона пользователя:
var user = await profiles.ChangeUserPhoneAsync(session.UserId, tryCodes.Auth.Data);
Проверка и создание пользователя по номеру:
var user = await profiles.GetUserOrNullByPhoneAsync(tryCodes.Auth.Data);
user ??= await profiles.CreateUserByPhoneAsync(tryCodes.Auth.Data);
AuthService отвечает за подтверждение личности, а ProfilesService - за хранение и управление данными профиля. Их связка гарантирует, что любая успешная авторизация всегда соответствует реальной записи пользователя в системе.
AuthService хранит все пользовательские сессии в моделе AuthSession. Активные сессии кэшируются в словарях сервиса, остальные хранятся в SQLite.
string Sid – идентификатор сессии (session id)
long UserId – идентификатор пользователя, к которому относится сессия
DateTimeOffset Created – дата и время создания сессии
DateTimeOffset LastActive – время последней активности
AuthToken? AuthToken – выданный токен аутентификации для этой сессии
bool IsDeleted – признак, что сессия удалена
Модель описывающая доступы (права) пользователя. Имеет цифровую подпись сервиса выдавшего его, сроки годности. Через CheckAuthOrEmptyAsync можно запросить новый токен. Сервис по SID поймет какой пользователь делает запрос и выдаст новый токен.
long UserId – идентификатор пользователя, для которого выпущен токен
Access[] Accesses – список доступов (прав и ролей) пользователя
long CreatedUnixMS – время создания токена в Unix-миллисекундах
long UntilUnixMS – время окончания действия токена в Unix-миллисекундах
string Sign – криптографическая подпись токена
AccessTypeEnum Type – тип доступа (роль/право)
string Data – дополнительная строка данных (контекст доступа)
DateTimeOffset UntilTime – время окончания действия доступа
Содержит таблицы и индексы
-- 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
)