Categorygithub.com/notblinkyet/sso
module
0.0.0-20241122123614-b241f90020ce
Repository: https://github.com/notblinkyet/sso.git
Documentation: pkg.go.dev

# README

Сервис аутентификации и авторизации

Данный проект представляет собой сервис аутентификации и авторизации, написанный на Go. В качестве основной базы данных используется PostgreSQL, а для кэширования данных — Redis. Ниже представлен подробный обзор структуры и функциональности проекта.


Возможности

  • Аутентификация и авторизация пользователей через gRPC API.
  • Безопасная обработка паролей с использованием bcrypt.
  • Генерация и проверка JWT-токенов для управления сессиями.
  • Управление кэшем через Redis.
  • Операции с базой данных через PostgreSQL.
  • Гибкая настройка через YAML-файлы.

Структура проекта

.
├── cmd
│   ├── migrator
│   │   └── main.go          # Мигратор для создания схемы базы данных
│   └── sso
│       └── main.go          # Точка входа основного приложения
├── config
│   ├── example.yaml         # Пример конфигурации
│   ├── local.yaml           # Конфигурация для локальной разработки
│   └── remote.yaml          # Конфигурация для удаленной среды (продакшн)
├── docker-compose.yaml      # Конфигурация Docker Compose
├── Dockerfile.app           # Dockerfile для контейнера приложения
├── Dockerfile.migrator      # Dockerfile для контейнера мигратора
├── go.mod                   # Зависимости Go
├── go.sum                   # Контрольные суммы зависимостей Go
├── internal                 # Основная логика приложения
│   ├── app                  # Ядро приложения
│   │   ├── app.go           # Структура приложения и инициализация
│   │   └── grpc
│   │       └── app.go       # Настройка gRPC сервера
│   ├── config
│   │   └── config.go        # Загрузка конфигурации
│   ├── grpc
│   │   └── auth
│   │       └── server.go    # Реализация gRPC сервиса аутентификации
│   ├── lib                  # Вспомогательные библиотеки
│   │   ├── jwt
│   │   │   └── jwt.go       # Утилиты для работы с JWT
│   │   └── logger
│   │       ├── handlers
│   │       │   └── slogpretty
│   │       │       └── slogpretty.go # Форматирование логов
│   │       └── sl
│   │           └── error.go # Логирование ошибок
│   ├── logger
│   │   └── logger.go        # Настройка логгера
│   ├── models               # Модели данных
│   │   ├── app.go
│   │   └── user.go
│   ├── services
│   │   └── auth
│   │       └── auth.go      # Логика сервиса аутентификации
│   └── storage              # Интерфейсы и реализации хранилищ
│       ├── cache
│       │   ├── cache.go     # Интерфейс кэша
│       │   └── redis
│       │       └── redis.go # Реализация Redis-кэша
│       └── main_storage
│           ├── postgres
│           │   └── postgres.go # Реализация для PostgreSQL
│           └── storage.go   # Интерфейс основной базы данных
├── migrations               # SQL-миграции для базы данных
│   ├── 1_init.down.sql
│   ├── 1_init.up.sql
│   ├── 2_test_app.down.sql
│   └── 2_test_app.up.sql
├── Taskfile.yaml            # Конфигурация для Taskfile
└── tests                    # Тесты
    ├── register_login_test.go
    └── suite
        └── suite.go

Конфигурация

Директория config

  • example.yaml — шаблон конфигурации.
  • local.yaml — конфигурация для локальной разработки.
  • remote.yaml — конфигурация для удаленного окружения (продакшн).

В файлах конфигурации указаны:

  • Порты и хосты для приложения и сервисов.
  • Настройки подключения к базе данных.
  • Настройки для кэша (Redis).

Переменные окружения

Путь к конфигурационному файлу должен быть задан через переменную окружения. Пример:

CONFIG_PATH=./config/local.yaml

Запуск проекта

Предварительные требования

  • Установленные Docker и docker-compose.
  • Установленный Go версии 1.19 или выше.

Запуск через Docker Compose

Чтобы собрать и запустить приложение в контейнере:

docker-compose up --build

Локальный запуск

  1. Запустите PostgreSQL и Redis.
  2. Установите переменные окружения:
    export CONFIG_PATH=./config/local.yaml
    export POSTGRES_PASS=your_password
    export REDIS_PASS=your_password 
    
  3. Выполните миграции для создания схемы базы данных:
    go run ./cmd/migrator/main.go
    
  4. Запустите приложение:
    go run ./cmd/sso/main.go
    

Основные компоненты

Сервис аутентификации

Реализован в internal/services/auth/auth.go:

  • Регистрация: Register(ctx, login, password)
  • Вход: Login(ctx, login, password, appID)
  • Проверка администратора: IsAdmin(ctx, userID)

Хранилище

  • Кэш: Реализация на Redis в internal/storage/cache/redis/redis.go.
  • База данных: Реализация на PostgreSQL в internal/storage/main_storage/postgres/postgres.go.

JWT-токены

  • Генерация и проверка токенов реализована с использованием библиотеки github.com/golang-jwt/jwt/v5.

Proto файл

  • Релизовал его в данном репозитории: github.com/notblinkyet/proto_sso

Тестирование

Тесты находятся в папке tests/. Для запуска выполните:

go test ./tests/...

Зависимости

Проект использует следующие зависимости:

  • github.com/golang-jwt/jwt/v5 — для генерации и проверки JWT-токенов.
  • golang.org/x/crypto/bcrypt — для хэширования и проверки паролей.
  • github.com/jackc/pgx/v5/pgxpool — для подключения к PostgreSQL.
  • github.com/redis/go-redis/v9 — клиент для работы с Redis.

# Packages

No description provided by the author
No description provided by the author