# 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. **Изменение телефона пользователя**: ```csharp var user = await profiles.ChangeUserPhoneAsync(session.UserId, tryCodes.Auth.Data); ``` 2. **Проверка и создание пользователя по номеру**: ```csharp 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 ) ``` [Назад](/index.md)