Auth Service Go
Микросервис аутентификации и авторизации, написанный на Go. Предоставляет REST API для управления пользователями, аутентификации через JWT токены и контроля доступа.
Возможности
- 🔐 JWT токены для аутентификации
- 👥 Управление пользователями (создание, обновление, удаление)
- 🗄️ SQLite база данных с GORM
- 🔒 Поддержка TLS/SSL
- 📝 Регистрация пользователей (опционально)
- ⚙️ Гибкая конфигурация через переменные окружения
- 🐳 Docker поддержка
Требования
- Go 1.24.3 или новее
- SQLite3
Установка
Из исходного кода
git clone <repository-url>
cd auth_service_go
go mod download
go build
Docker
docker build -t auth_service .
docker run -p 8090:8090 auth_service
Конфигурация
Создайте файл .env или установите переменные окружения:
# Файлы базы данных
USERS_FILE=users.json
USERS_DB=users.db
# Настройки регистрации
ENABLE_SELF_REGISTER=false
# TLS настройки
ENABLE_TLS=false
CERT_FILE=/data/file.crt
KEY_FILE=/data/file.key
# Настройки сервера
SERVER_ADDRESS=0.0.0.0
SERVER_PORT=8090
Параметры конфигурации
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
USERS_FILE |
Путь к JSON файлу с пользователями | users.json |
USERS_DB |
Путь к SQLite базе данных | users.db |
ENABLE_SELF_REGISTER |
Разрешить самостоятельную регистрацию | false |
ENABLE_TLS |
Включить TLS/SSL | false |
CERT_FILE |
Путь к SSL сертификату | - |
KEY_FILE |
Путь к SSL ключу | - |
SERVER_ADDRESS |
IP адрес сервера | 0.0.0.0 |
SERVER_PORT |
Порт сервера | 8090 |
API Документация
Аутентификация
POST /api/token
Аутентификация пользователя по логину и паролю.
Запрос:
{
"username": "user",
"password": "password"
}
Ответ:
{
"token": "jwt_token_here",
"expires_at": "2024-01-01T00:00:00Z"
}
POST /api/token/verify
Проверка валидности JWT токена.
Запрос:
{
"token": "jwt_token_here"
}
Ответ:
{
"valid": true,
"user_id": "user_id_here"
}
POST /api/access
Запрос доступа с использованием токена.
Заголовки:
Authorization: Bearer jwt_token_here
Управление пользователями
POST /api/register
Регистрация нового пользователя.
Запрос:
{
"username": "newuser",
"password": "password",
"email": "user@example.com"
}
GET /api/users
Получение списка всех пользователей.
Заголовки:
Authorization: Bearer jwt_token_here
GET /api/users/user
Получение информации о текущем пользователе.
Заголовки:
Authorization: Bearer jwt_token_here
PUT /api/users/password
Изменение пароля пользователя.
Запрос:
{
"old_password": "old_password",
"new_password": "new_password"
}
PUT /api/users/change
Изменение данных пользователя.
Запрос:
{
"email": "new_email@example.com",
"first_name": "John",
"last_name": "Doe"
}
POST /api/users/add
Добавление нового пользователя (администратор).
Запрос:
{
"username": "newuser",
"password": "password",
"email": "user@example.com",
"role": "user"
}
DELETE /api/users/del
Удаление пользователя.
Запрос:
{
"user_id": "user_id_here"
}
Примеры использования
Получение токена
curl -X POST http://localhost:8090/api/token \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "password"}'
Использование токена
curl -X GET http://localhost:8090/api/users \
-H "Authorization: Bearer your_jwt_token_here"
Регистрация пользователя
curl -X POST http://localhost:8090/api/register \
-H "Content-Type: application/json" \
-d '{"username": "newuser", "password": "password", "email": "user@example.com"}'
Разработка
Структура проекта
auth_service_go/
├── api/ # API обработчики
├── database/ # Работа с базой данных
├── model/ # Модели данных
├── server/ # Настройка сервера
├── utils/ # Утилиты
├── main.go # Входная точка
├── go.mod # Зависимости Go
└── README.md # Документация
Запуск для разработки
# Установка зависимостей
go mod tidy
# Запуск с горячей перезагрузкой (требует air)
air
# Обычный запуск
go run main.go
Сборка
# Сборка для текущей платформы
go build
# Сборка для Linux
GOOS=linux GOARCH=amd64 go build
# Сборка для Windows
GOOS=windows GOARCH=amd64 go build
Безопасность
- Используйте HTTPS в продакшене
- Регулярно обновляйте зависимости
- Используйте сильные пароли
- Настройте правильные разрешения для файлов базы данных
- Не храните секреты в коде
Лицензия
Этот проект лицензируется под MIT лицензией. Смотрите файл LICENSE для подробностей.
Поддержка
При возникновении проблем создайте issue в репозитории проекта.