Reviewed-on: https://gitea.home.com:3000/TolaMironcenko/auth_service_c/pulls/2
Служба аутентификации на 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
mkdir build
cd build
cmake ..
make
Использование Make
make
Использование Meson
meson setup builddir
meson compile -C builddir
Настройка
Служба может быть настроена через файл config.json. Пример файла config.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, содержащему пользователей по умолчанию для загрузки при запуске.
Запуск службы
После сборки вы можете запустить службу из каталога сборки:
./auth_service
Тестирование
Проект включает набор тестов. Вы можете запустить их с помощью:
make test
или если вы используете Meson:
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.