Микросервис для аутентификации и авторизации пользователей с поддержкой множественных приложений.
- Регистрация пользователей - создание новых аккаунтов с хешированием паролей
- Аутентификация - вход в систему с получением 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 кода)
git clone <repository-url>
cd ssogo mod downloadСкопируйте и отредактируйте конфигурационный файл:
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 # таймаут запросовgo run cmd/migrator/main.gogo run cmd/sso/main.go --config=./config/local.yamlСервис будет доступен по адресу: localhost:44044
При изменении .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.protosso/
├── cmd/ # Точки входа приложения
│ ├── sso/ # Основной сервис
│ └── migrator/ # Миграции БД
├── config/ # Конфигурационные файлы
├── iternal/ # Внутренняя логика приложения
│ ├── app/ # Инициализация приложения
│ ├── config/ # Конфигурация
│ ├── domain/ # Доменные модели
│ ├── grpc/ # gRPC серверы
│ ├── lib/ # Библиотеки (JWT)
│ └── services/ # Бизнес-логика
├── migrations/ # SQL миграции
├── protos1/ # Protocol Buffers
├── storage/ # База данных
└── tests/ # Тесты
Регистрация нового пользователя.
rpc Register (RegisterRequest) returns (RegisterResponse);
message RegisterRequest {
string email = 1;
string password = 2;
}
message RegisterResponse {
int64 user_id = 1;
}Аутентификация пользователя.
rpc Login (LoginRequest) returns (LoginResponse);
message LoginRequest {
string email = 1;
string password = 2;
int32 app_id = 3;
}
message LoginResponse {
string token = 1;
}Проверка прав администратора.
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 и секретов приложений
- Логирование: Структурированное логирование всех операций
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"
}- Форкните репозиторий
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Зафиксируйте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Этот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.
Если у вас есть вопросы или проблемы:
- Проверьте Issues на наличие похожих проблем
- Создайте новый Issue с подробным описанием
- Приложите логи и конфигурацию (без секретов)
- Базовая функциональность регистрации и входа
- gRPC API
- SQLite хранилище
- JWT токены
- Система миграций
- Базовые тесты
Сделано с ❤️ на Go