All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 35s
Authorization Service
Сервис авторизации и аутентификации с использованием JWT токенов.
Возможности
- Регистрация и аутентификация пользователей
- JWT токены (Access и Refresh)
- Проверка срока истечения токенов
- Обновление токенов через Refresh Token
- Ролевая система доступа (Student, Teacher, Admin)
- Гибкая система middleware для авторизации
Технологии
- Go 1.21+
- PostgreSQL
- Gin Web Framework
- JWT (golang-jwt/jwt)
- YAML конфигурация
- Переменные окружения для секретов
Быстрый старт
1. Клонирование репозитория
git clone <repository-url>
cd authorization
2. Настройка переменных окружения
Скопируйте .env.example в .env и заполните своими значениями:
cp .env.example .env
Отредактируйте .env:
# Database
DB_PASSWORD=your_secure_password
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_NAME=authorization
# JWT Secrets (ВАЖНО: Используйте сложные случайные строки!)
# Генерация: openssl rand -base64 32
ACCESS_TOKEN_SECRET=your_access_token_secret_here
REFRESH_TOKEN_SECRET=your_refresh_token_secret_here
3. Настройка базы данных
Запустите PostgreSQL через Docker:
docker-compose up -d
Или вручную создайте базу данных:
CREATE DATABASE authorization;
Примените миграции:
# Используйте migrate CLI или запустите SQL скрипты из schema/
4. Установка зависимостей
go mod download
5. Запуск приложения
go run cmd/main.go
Сервер запустится на http://localhost:8081
API Эндпоинты
Публичные (без авторизации)
Регистрация
POST /auth-service/auth/sign-up
Content-Type: application/json
{
"name": "John Doe",
"username": "john",
"password": "securepassword"
}
Вход
POST /auth-service/auth/sign-in
Content-Type: application/json
{
"username": "john",
"password": "securepassword"
}
Ответ:
{
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc..."
}
Обновление токена
POST /auth-service/auth/refresh
Content-Type: application/json
{
"refreshToken": "eyJhbGc..."
}
Защищенные эндпоинты
Все запросы должны содержать заголовок:
Authorization: Bearer <access_token>
Получить всех пользователей (любой авторизованный)
GET /auth-service/api/users
Authorization: Bearer <token>
Получить пользователя по username (любой авторизованный)
GET /auth-service/api/users/:username
Authorization: Bearer <token>
Изменить роль пользователя (только Admin)
POST /auth-service/api/users/:username
Authorization: Bearer <admin_token>
Content-Type: application/json
{
"role": "teacher"
}
Удалить пользователя (только Admin)
DELETE /auth-service/api/users/:username
Authorization: Bearer <admin_token>
Роли
student- базовая рольteacher- роль преподавателяadmin- административная роль
Система авторизации
Проект использует двухуровневую систему middleware:
- userIdentity - базовый middleware, проверяет валидность токена
- requireRole - проверяет роль пользователя
Примеры:
// Все авторизованные
users.GET("", h.getAllUsers)
// Только учителя и админы
users.PUT("/:id", h.requireTeacher(), h.updateUser)
// Только админы
users.DELETE("/:id", h.requireAdmin(), h.deleteUser)
Структура проекта
authorization/
├── cmd/
│ └── main.go # Точка входа
├── internal/
│ ├── config/ # Конфигурация
│ ├── handler/ # HTTP handlers
│ │ ├── auth.go
│ │ ├── middleware.go # Middleware авторизации
│ │ └── users.go
│ ├── repository/ # Слой БД
│ └── service/ # Бизнес-логика
│ ├── auth.go
│ └── auth_test.go
├── configs/
│ └── application.yaml # Конфигурация (без секретов!)
├── schema/ # SQL миграции
├── .env # Переменные окружения (НЕ коммитить!)
├── .env.example # Пример .env
└── docker-compose.yaml # Docker конфигурация
Переменные окружения
Обязательные
DB_PASSWORD- пароль БДACCESS_TOKEN_SECRET- секрет для access токеновREFRESH_TOKEN_SECRET- секрет для refresh токенов
Опциональные
DB_HOST- хост БД (default: localhost)DB_PORT- порт БД (default: 5432)DB_USER- пользователь БД (default: postgres)DB_NAME- имя БД (default: authorization)SERVER_PORT- порт сервера (default: 8081)ACCESS_TOKEN_TTL_MINUTES- время жизни access токена (default: 15)REFRESH_TOKEN_TTL_MINUTES- время жизни refresh токена (default: 90)
Безопасность
⚠️ ВАЖНО:
- Никогда не коммитьте файл
.envв репозиторий - Используйте сложные случайные строки для токенов
- Генерация секретов:
openssl rand -base64 32 - В продакшене используйте HTTPS
- Регулярно ротируйте секреты
Разработка
Запуск тестов
go test ./...
Запуск с hot reload
air
Docker
Запуск всего стека (app + postgres):
docker-compose up
Лицензия
MIT
Description
Languages
Go
99.7%
PowerShell
0.3%