Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 12s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 18s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 13s
135 lines
7.1 KiB
Markdown
135 lines
7.1 KiB
Markdown
# Служба аутентификации на C
|
|
|
|
Этот репозиторий содержит реализацию службы аутентификации, написанной на языке C. Она предоставляет надежный набор API-интерфейсов для управления пользователями, аутентификации на основе токенов и авторизации, используя Mongoose в качестве веб-сервера и SQLite в качестве базы данных.
|
|
|
|
## Особенности
|
|
|
|
* **Безопасная аутентификация:** Получение и проверка токенов для безопасного доступа к ресурсам.
|
|
* **Управление пользователями:** Полный набор функций CRUD (создание, чтение, обновление, удаление) для учетных записей пользователей, включая добавление, получение, изменение и удаление пользователей.
|
|
* **Регистрация пользователей:** Удобный API для регистрации новых пользователей.
|
|
* **Сброс пароля:** Возможность изменения паролей пользователей.
|
|
* **Поддержка TLS:** Встроенная поддержка HTTPS для защищенной связи с использованием TLS-сертификатов.
|
|
* **Гибкая конфигурация:** Легкая настройка службы через файл `config.json`.
|
|
* **Легковесная база данных:** Использование SQLite для эффективного хранения данных.
|
|
* **Mongoose Web Server:** Построен на высокопроизводительном и легковесном Mongoose Web Server.
|
|
|
|
## Начало работы
|
|
|
|
Чтобы запустить службу аутентификации, выполните следующие шаги:
|
|
|
|
### Зависимости
|
|
|
|
Убедитесь, что у вас установлены следующие зависимости:
|
|
|
|
* `gcc` (или другой совместимый компилятор C)
|
|
* `make` (для использования Makefile) или `cmake` и `ninja` (для использования CMake/Meson)
|
|
* Библиотеки `OpenSSL` (для `ssl` и `crypto`)
|
|
* Библиотека `SQLite3`
|
|
* `pthread` (обычно поставляется с системами на базе Unix)
|
|
|
|
### Сборка проекта
|
|
|
|
Вы можете собрать проект, используя `CMake`, `Make` или `Meson`.
|
|
|
|
#### Использование CMake
|
|
|
|
```bash
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
Использование Make
|
|
|
|
```bash
|
|
make
|
|
```
|
|
|
|
#### Использование Meson
|
|
|
|
```bash
|
|
meson setup builddir
|
|
meson compile -C builddir
|
|
```
|
|
|
|
### Настройка
|
|
|
|
Служба может быть настроена через файл `config.json`. Пример файла `config.json`:
|
|
|
|
```json
|
|
{
|
|
"address": "0.0.0.0:8222",
|
|
"tls_enabled": false,
|
|
"tls_address": "0.0.0.0:8223",
|
|
"tls_cert": "path/to/your/cert.pem",
|
|
"tls_key": "path/to/your/key.pem",
|
|
"default_users_file": "users.json"
|
|
}
|
|
```
|
|
|
|
* `address`: Адрес и порт для прослушивания HTTP-соединений.
|
|
* `tls_enabled`: Установите `true`, чтобы включить HTTPS.
|
|
* `tls_address`: Адрес и порт для прослушивания HTTPS-соединений (если `tls_enabled` установлено в `true`).
|
|
* `tls_cert`: Путь к файлу TLS-сертификата (если `tls_enabled` установлено в `true`).
|
|
* `tls_key`: Путь к файлу TLS-ключа (если `tls_enabled` установлено в `true`).
|
|
* `default_users_file`: Путь к файлу JSON, содержащему пользователей по умолчанию для загрузки при запуске.
|
|
|
|
### Запуск службы
|
|
|
|
После сборки вы можете запустить службу из каталога сборки:
|
|
|
|
```bash
|
|
./auth_service
|
|
```
|
|
|
|
### Тестирование
|
|
|
|
Проект включает набор тестов. Вы можете запустить их с помощью:
|
|
|
|
```bash
|
|
make test
|
|
```
|
|
или если вы используете Meson:
|
|
```bash
|
|
meson test -C builddir
|
|
```
|
|
|
|
## API Эндпоинты
|
|
|
|
Вот доступные API-маршруты:
|
|
|
|
* `GET /#`: Корневая страница.
|
|
* `OPTIONS /#`: Установка заголовков CORS.
|
|
* `POST /api/token`: Получение токена аутентификации.
|
|
* **Запрос**: `{ "username": "your_username", "password": "your_password" }`
|
|
* **Ответ**: `{ "token": "your_jwt_token" }`
|
|
* `POST /api/token/verify`: Проверка действительности токена.
|
|
* **Запрос**: `{ "token": "your_jwt_token" }`
|
|
* **Ответ**: `{ "valid": true/false }`
|
|
* `POST /api/users`: Получение списка всех пользователей. (Требуется аутентификация)
|
|
* **Запрос**: `{}`
|
|
* **Ответ**: `[ { "id": "1", "username": "user1" }, ... ]`
|
|
* `POST /api/users/user`: Получение информации о конкретном пользователе. (Требуется аутентификация)
|
|
* **Запрос**: `{ "username": "target_username" }`
|
|
* **Ответ**: `{ "id": "1", "username": "target_username", ... }`
|
|
* `DELETE /api/users`: Удаление пользователя. (Требуется аутентификация)
|
|
* **Запрос**: `{ "id": "user_id_to_delete" }`
|
|
* **Ответ**: `{ "status": "success" }`
|
|
* `POST /api/users/password`: Изменение пароля пользователя. (Требуется аутентификация)
|
|
* **Запрос**: `{ "id": "user_id", "old_password": "...", "new_password": "..." }`
|
|
* **Ответ**: `{ "status": "success" }`
|
|
* `PUT /api/users`: Обновление информации о пользователе. (Требуется аутентификация)
|
|
* **Запрос**: `{ "id": "user_id", "field_to_update": "new_value" }`
|
|
* **Ответ**: `{ "status": "success" }`
|
|
* `POST /api/users/add`: Добавление нового пользователя. (Требуется аутентификация)
|
|
* **Запрос**: `{ "username": "new_username", "password": "new_password" }`
|
|
* **Ответ**: `{ "id": "new_user_id", "username": "new_username" }`
|
|
* `POST /api/register`: Регистрация нового пользователя.
|
|
* **Запрос**: `{ "username": "new_username", "password": "new_password" }`
|
|
* **Ответ**: `{ "id": "new_user_id", "username": "new_username" }`
|
|
|
|
## Лицензия
|
|
|
|
Этот проект распространяется под лицензией [MIT License](LICENSE).
|