# Packages
# README
Auth Service (gRPC Авторизационный Сервис)
Этот проект реализует gRPC-сервис для авторизации пользователей и управления приложениями. Сервис включает операции регистрации пользователей, входа в систему и проверки прав администратора, обеспечивая безопасный доступ к различным приложениям с использованием токенов.
Функциональные возможности
- Регистрация пользователей: Добавление новых пользователей с сохранением их почты и хешированного пароля.
- Авторизация пользователей: Вход в систему с выдачей JWT-токена.
- Проверка прав администратора: Проверка, является ли пользователь администратором.
- gRPC: Все операции реализованы через gRPC для эффективной коммуникации.
- Аутентификация с использованием токенов: Для авторизации используется JWT-токен.
- Логирование: Структурированное логирование с использованием
slog
для лучшей наблюдаемости. - База данных: Информация о пользователях и приложениях хранится в базе данных SQLite.
gRPC Эндпоинты
1. Регистрация пользователя
Эндпоинт: Register
Описание: Регистрирует нового пользователя, сохраняя его почту и хеш пароля.
Запрос:
message RegisterRequest {
string email = 1;
string password = 2;
}
Ответ:
message RegisterResponse {
int64 user_id = 1;
}
2. Авторизация пользователя
Эндпоинт: Login
Описание: Аутентифицирует пользователя и возвращает JWT токен для авторизации.
Запрос:
message LoginRequest {
string email = 1;
string password = 2;
int64 app_id = 3;
}
Ответ:
message LoginResponse {
string token = 1;
}
3. Проверка прав администратора
Эндпоинт: IsAdmin
Описание: Проверяет, является ли пользователь администратором.
Запрос:
message IsAdminRequest {
int64 user_id = 1;
}
Ответ:
message IsAdminResponce {
bool is_admin = 1;
}
Структура базы данных
База данных состоит из двух основных таблиц: users
и apps
. Таблица users
хранит информацию о пользователях, включая почту, хеш пароля и статус администратора. Таблица apps
хранит информацию о приложениях для управления авторизацией.
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
passwd_hash BLOB NOT NULL,
is_admin BOOLEAN NOT NULL DEFAULT FALSE
);
CREATE INDEX IF NOT EXISTS idx_email ON users(email);
CREATE TABLE IF NOT EXISTS apps (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
secret TEXT NOT NULL UNIQUE
);
Конфигурация
Сервис настраивается через TOML-файл. Конфигурация включает параметры для базы данных, gRPC сервера и приложения, такие как время жизни токена и уровень логирования.
[db_config]
path = "some/db/path"
[grpc_server_config]
port = <port>
timeout = "10s"
[app_config]
token_ttl = "30m0s"
log_level = "<local/dev/prod>"
Переменные окружения
Для корректной работы сервиса необходимо установить следующие переменные окружения:
CONFIG_PATH="<path_to_config>"
DOCKER_CONFIG_PATH="<path_to_docker_config>"
Как запустить
-
Клонируйте репозиторий:
git clone https://github.com/yourusername/auth-service.git cd auth-service
-
Настройте окружение:
Убедитесь, что у вас установлены Docker и Docker Compose. Установите переменную окружения для пути к конфигурационному файлу:
DOCKER_CONFIG_PATH="<path_to_docker_config>"
-
Запустите сервис:
Используйте Docker Compose для запуска gRPC сервиса и базы данных SQLite:
docker-compose up -d
Сервис gRPC будет доступен на
localhost:<port>
.
Логирование
Сервис использует slog
для структурированного логирования. Уровень логирования можно изменить через параметр log_level
в конфигурационном файле.