Files
wt 7d234a30d0
Build and push Docker Image / Build-and-Docker-Image (push) Successful in 36s
Update README.md
2025-07-16 15:05:06 +07:00

279 lines
6.6 KiB
Markdown

# Auth Service Go
Микросервис аутентификации и авторизации, написанный на Go. Предоставляет REST API для управления пользователями, аутентификации через JWT токены и контроля доступа.
## Возможности
- 🔐 JWT токены для аутентификации
- 👥 Управление пользователями (создание, обновление, удаление)
- 🗄️ SQLite база данных с GORM
- 🔒 Поддержка TLS/SSL
- 📝 Регистрация пользователей (опционально)
- ⚙️ Гибкая конфигурация через переменные окружения
- 🐳 Docker поддержка
## Требования
- Go 1.24.3 или новее
- SQLite3
## Установка
### Из исходного кода
```bash
git clone <repository-url>
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 в репозитории проекта.