Skip to content

BOBAvov/sso

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSO (Single Sign-On) Service

Микросервис для аутентификации и авторизации пользователей с поддержкой множественных приложений.

🚀 Возможности

  • Регистрация пользователей - создание новых аккаунтов с хешированием паролей
  • Аутентификация - вход в систему с получением JWT токенов
  • Авторизация - проверка прав администратора
  • Мультиприложение - поддержка множественных приложений с уникальными секретами
  • gRPC API - высокопроизводительный API для микросервисной архитектуры
  • SQLite хранилище - легковесная база данных для разработки и тестирования
  • Миграции - управление схемой базы данных
  • Тестирование - комплексные тесты с использованием testify

🏗️ Архитектура

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   gRPC Client   │───▶│   SSO Service   │───▶│   SQLite DB     │
│                 │    │                 │    │                 │
│ - Register      │    │ - Auth Service  │    │ - users         │
│ - Login         │    │ - JWT Manager   │    │ - apps          │
│ - IsAdmin       │    │ - Storage Layer │    │                 │
└─────────────────┘    └─────────────────┘    └─────────────────┘

📋 Требования

  • Go 1.24+
  • SQLite3
  • Protocol Buffers (для генерации gRPC кода)

🛠️ Установка и запуск

1. Клонирование репозитория

git clone <repository-url>
cd sso

2. Установка зависимостей

go mod download

3. Настройка конфигурации

Скопируйте и отредактируйте конфигурационный файл:

cp config/local.yaml config/my-config.yaml

Основные параметры конфигурации:

env: "local"              # local, dev, prod
token_ttl: 1h             # время жизни JWT токенов
storage_path: "./storage/sso.db"  # путь к базе данных
grpc:
  port: 44044             # порт gRPC сервера
  timeout: 10s            # таймаут запросов

4. Запуск миграций

go run cmd/migrator/main.go

5. Запуск сервиса

go run cmd/sso/main.go --config=./config/local.yaml

Сервис будет доступен по адресу: localhost:44044

🔧 Разработка

Генерация gRPC кода

При изменении .proto файлов необходимо перегенерировать код:

# Установите protoc и protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

# Генерация кода
protoc --go_out=. --go-grpc_out=. protos1/proto/sso/sso.proto

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

sso/
├── cmd/                    # Точки входа приложения
│   ├── sso/               # Основной сервис
│   └── migrator/          # Миграции БД
├── config/                # Конфигурационные файлы
├── iternal/               # Внутренняя логика приложения
│   ├── app/               # Инициализация приложения
│   ├── config/            # Конфигурация
│   ├── domain/            # Доменные модели
│   ├── grpc/              # gRPC серверы
│   ├── lib/               # Библиотеки (JWT)
│   └── services/          # Бизнес-логика
├── migrations/            # SQL миграции
├── protos1/               # Protocol Buffers
├── storage/               # База данных
└── tests/                 # Тесты

📡 API

gRPC сервис Auth

Register

Регистрация нового пользователя.

rpc Register (RegisterRequest) returns (RegisterResponse);

message RegisterRequest {
  string email = 1;
  string password = 2;
}

message RegisterResponse {
  int64 user_id = 1;
}

Login

Аутентификация пользователя.

rpc Login (LoginRequest) returns (LoginResponse);

message LoginRequest {
  string email = 1;
  string password = 2;
  int32 app_id = 3;
}

message LoginResponse {
  string token = 1;
}

IsAdmin

Проверка прав администратора.

rpc IsAdmin (IsAdminRequest) returns (IsAdminResponse);

message IsAdminRequest {
  int64 user_id = 1;
}

message IsAdminResponse {
  bool is_admin = 1;
}

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

Запуск тестов:

go test ./...

Запуск конкретного теста:

go test ./tests/auth_register_login_test.go -v

🔐 Безопасность

  • Хеширование паролей: Используется bcrypt с настраиваемой стоимостью
  • JWT токены: Подписанные токены с настраиваемым временем жизни
  • Валидация приложений: Проверка app_id и секретов приложений
  • Логирование: Структурированное логирование всех операций

🚀 Развертывание

Docker (рекомендуется)

FROM golang:1.24-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o sso cmd/sso/main.go

FROM alpine:latest
RUN apk --no-cache add ca-certificates sqlite
WORKDIR /root/
COPY --from=builder /app/sso .
COPY --from=builder /app/config ./config
COPY --from=builder /app/migrations ./migrations
CMD ["./sso", "--config=./config/prod.yaml"]

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

export SSO_ENV=prod
export SSO_TOKEN_TTL=24h
export SSO_STORAGE_PATH=/data/sso.db
export SSO_GRPC_PORT=44044

📊 Мониторинг

Сервис поддерживает структурированное логирование в формате JSON для продакшена:

{
  "time": "2024-01-01T12:00:00Z",
  "level": "INFO",
  "msg": "user logged in successfully",
  "op": "Auth.Login",
  "username": "user@example.com"
}

🤝 Вклад в проект

  1. Форкните репозиторий
  2. Создайте ветку для новой функции (git checkout -b feature/amazing-feature)
  3. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  4. Отправьте в ветку (git push origin feature/amazing-feature)
  5. Откройте Pull Request

📝 Лицензия

Этот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.

🆘 Поддержка

Если у вас есть вопросы или проблемы:

  1. Проверьте Issues на наличие похожих проблем
  2. Создайте новый Issue с подробным описанием
  3. Приложите логи и конфигурацию (без секретов)

🔄 Changelog

v1.0.0

  • Базовая функциональность регистрации и входа
  • gRPC API
  • SQLite хранилище
  • JWT токены
  • Система миграций
  • Базовые тесты

Сделано с ❤️ на Go

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages