This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Auth Service Go
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,42 +1,279 @@
|
||||
# auth_service
|
||||
# Auth Service Go
|
||||
|
||||
- [routes](#routes)
|
||||
- [build](#build)
|
||||
- [configure](#configure)
|
||||
- [exaple](#example)
|
||||
Микросервис аутентификации и авторизации, написанный на Go. Предоставляет REST API для управления пользователями, аутентификации через JWT токены и контроля доступа.
|
||||
|
||||
## routes
|
||||
## Возможности
|
||||
|
||||
- `/api/token` - Auth by username/password return token
|
||||
- `/api/token/verify` - Verify token
|
||||
- `/api/access` - Access request by token
|
||||
- `/api/register` - Register user
|
||||
- `/api/users` - Get all users data
|
||||
- `/api/users/user` - Get user data
|
||||
- `/api/users/password` - Change user password
|
||||
- `/api/users/change` - Change user data
|
||||
- `/api/users/del` - Delete user
|
||||
- `/api/users/add` - Add user
|
||||
- 🔐 JWT токены для аутентификации
|
||||
- 👥 Управление пользователями (создание, обновление, удаление)
|
||||
- 🗄️ SQLite база данных с GORM
|
||||
- 🔒 Поддержка TLS/SSL
|
||||
- 📝 Регистрация пользователей (опционально)
|
||||
- ⚙️ Гибкая конфигурация через переменные окружения
|
||||
- 🐳 Docker поддержка
|
||||
|
||||
## buuild
|
||||
## Требования
|
||||
|
||||
```shell
|
||||
- Go 1.24.3 или новее
|
||||
- SQLite3
|
||||
|
||||
## Установка
|
||||
|
||||
### Из исходного кода
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd auth_service_go
|
||||
go mod download
|
||||
go build
|
||||
```
|
||||
|
||||
## configure
|
||||
|
||||
### example
|
||||
### 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
|
||||
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 в репозитории проекта.
|
||||
Reference in New Issue
Block a user