Categorygithub.com/Andrew-Savin-msk/sso
repository
0.0.0-20241023155900-b1f9482b78cb
Repository: https://github.com/andrew-savin-msk/sso.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# 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>"

Как запустить

  1. Клонируйте репозиторий:

    git clone https://github.com/yourusername/auth-service.git
    cd auth-service
    
  2. Настройте окружение:

    Убедитесь, что у вас установлены Docker и Docker Compose. Установите переменную окружения для пути к конфигурационному файлу:

    DOCKER_CONFIG_PATH="<path_to_docker_config>"
    
  3. Запустите сервис:

    Используйте Docker Compose для запуска gRPC сервиса и базы данных SQLite:

    docker-compose up -d
    

    Сервис gRPC будет доступен на localhost:<port>.

Логирование

Сервис использует slog для структурированного логирования. Уровень логирования можно изменить через параметр log_level в конфигурационном файле.