From e60e9f3b471fcf6c8fdee09cf75a1b3e87fb46cb Mon Sep 17 00:00:00 2001 From: MystiSs Date: Fri, 28 Nov 2025 21:16:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20Auth=20=D0=BC=D0=B8=D0=BA=D1=80=D0=BE=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B8=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth.proto | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 auth.proto diff --git a/auth.proto b/auth.proto new file mode 100644 index 0000000..3230aaf --- /dev/null +++ b/auth.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; + +package auth; + +// AuthService предоставляет методы для регистрации пользователя, +// подтверждения email, аутентификации, обновления токенов, +// валидации access токена и выхода из системы. +service AuthService { + + // Регистрация нового пользователя. + // После регистрации пользователю отправляется код подтверждения на email. + rpc Register(RegisterRequest) returns (AuthResponse); + + // Подтверждение email пользователя после регистрации. + rpc VerifyUser(VerifyUserRequest) returns (VerifyUserResponse); + + // Аутентификация пользователя по логину или email и паролю. + // При успешном входе создаётся новая сессия для устройства. + rpc Login(LoginRequest) returns (AuthResponse); + + // Обновление пары access/refresh токенов. + // Используется, когда access токен истёк. + rpc RefreshTokens(RefreshRequest) returns (AuthResponse); + + // Проверка валидности access токена. + rpc ValidateToken(ValidateRequest) returns (ValidateResponse); + + // Выход из системы для текущего или всех устройств. + rpc Logout(LogoutRequest) returns (LogoutResponse); +} + +// Запрос на регистрацию нового пользователя +message RegisterRequest { + // Уникальный логин пользователя. + // Может содержать только буквы, цифры и подчёркивания. + string login = 1; + // Email пользователя. + // Должен быть валидным email адресом. + string email = 2; + // Пароль пользователя. Должен содержать буквы и цифры. + string password = 3; + // Идентификатор устройства, с которого производится регистрация. + // Используется для привязки первой сессии устройства. + string device_id = 4; + // Уникальный отпечаток устройства (генерируется клиентом). + // Используется для безопасности. + string device_fingerprint = 5; +} + + +// Запрос на вход пользователя в систему +message LoginRequest { + // Логин пользователя. + // Если указано одновременно логин и email — логин имеет приоритет. + string login = 1; + // Email пользователя как альтернативный идентификатор. + string email = 2; + // Пароль пользователя. + string password = 3; + // Уникальный идентификатор устройства. + string device_id = 4; + // Уникальный отпечаток устройства. + // Может включать hash модели, версии ОС, мак-адресов и т. п. + string device_fingerprint = 5; +} + + +// Запрос для подтверждения email пользователя +message VerifyUserRequest { + // ID пользователя, которого необходимо подтвердить. + int64 user_id = 1; + // Код подтверждения, отправленный на email. + string confirmation_code = 2; +} + + +// Ответ с результатом подтверждения email +message VerifyUserResponse { + // Флаг успешного подтверждения пользователя. + bool is_verified = 1; +} + + +// Запрос на обновление access/refresh токенов +message RefreshRequest { + // Текущий refresh токен. + // Должен быть действительным и не истёкшим. + string refresh_token = 1; + // Идентификатор устройства, для которого обновляется сессия. + string device_id = 2; +} + +// Ответ, содержащий новые токены +message AuthResponse { + // Новый access токен. + string access_token = 1; + // Новый refresh токен. + string refresh_token = 2; + // Unix timestamp, когда access токен истекает. + int64 access_expires_at = 3; + // Unix timestamp, когда refresh токен истекает. + int64 refresh_expires_at = 4; + // ID пользователя. + int64 user_id = 5; +} + +// Запрос для проверки access токена +message ValidateRequest { + // Проверяемый access токен. + string access_token = 1; +} + +// Ответ по результатам проверки access токена +message ValidateResponse { + // Флаг валидности токена. + bool is_valid = 1; + // ID пользователя, если токен валиден. + int64 user_id = 2; + // Логин пользователя. + string login = 3; +} + +// Запрос для выхода пользователя +message LogoutRequest { + // Refresh токен, который требуется деактивировать. + string refresh_token = 1; + // Идентификатор устройства. + string device_id = 2; + // Если true — пользователь выходит из всех устройств. + bool logout_all = 3; +} + +// Ответ на запрос выхода +message LogoutResponse { + // Флаг успешного логаута. + bool success = 1; +}