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