279 lines
6.6 KiB
Markdown
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 в репозитории проекта. |