Перейти к содержанию

Пояснительная записка

1. Общие сведения о проекте

Наименование проекта:
DairyDemo.Auth — модуль авторизации информационной системы

Тип приложения:
Настольное приложение (Windows Forms)

Язык программирования:
C#

Платформа:
.NET 8.0 (Windows)

СУБД:
MySQL

Назначение проекта:
Реализация механизма авторизации пользователей с разграничением ролей, интерактивной капчей и системой блокировки учётных записей.


2. Функциональное назначение системы

Разрабатываемая информационная система предназначена для:

  • аутентификации зарегистрированных пользователей;
  • разграничения доступа по ролям Администратор / Пользователь;
  • защиты от автоматизированного подбора паролей с помощью капчи;
  • блокировки учётных записей при превышении допустимого числа неудачных попыток входа;
  • администрирования пользователей (добавление, изменение, снятие блокировки).

Система используется в рамках учебного проекта и демонстрирует реализацию типового модуля безопасности информационной системы.


3. Основные функции системы

3.1. Авторизация пользователя

Описание:

Проверка корректности логина и пароля пользователя с учётом прохождения капчи.

Входные данные:

  • логин (строка);
  • пароль (строка);
  • результат прохождения капчи (логическое значение).

Результат:

  • успешная авторизация и переход на рабочий стол;
  • сообщение об ошибке;
  • блокировка учётной записи при превышении лимита попыток.

3.2. Интерактивная капча

Описание:

Графическая капча в виде пазла 2×2, собираемого пользователем вручную.

Назначение:

  • защита от автоматизированных атак;
  • подтверждение участия человека в процессе авторизации.

Результат:

  • разрешение продолжения авторизации;
  • отказ при неверной сборке изображения.

3.3. Блокировка учётной записи

Описание:

Автоматическая блокировка пользователя при трёх подряд неудачных попытках входа.

Условия блокировки:

  • неверно введён пароль;
  • неверно собрана капча.

Результат:

  • запрет дальнейшей авторизации;
  • уведомление пользователя о необходимости обращения к администратору.

3.4. Администрирование пользователей

Описание:
Управление учётными записями пользователей через интерфейс администратора.

Функции администратора:

  • просмотр списка пользователей;
  • добавление новых пользователей;
  • изменение логина и роли;
  • смена пароля;
  • снятие блокировки учётной записи.

4. Архитектура и структура проекта

Проект реализован с разделением на логические слои:

  • Data — доступ к данным и модели;
  • Services — бизнес-логика;
  • UI — пользовательский интерфейс.

Такой подход обеспечивает модульность, расширяемость и удобство сопровождения кода.


5. Описание используемых классов и методов

5.1. Класс Db

Назначение:
Создание соединений с базой данных MySQL.

Методы:

MySqlConnection CreateConnection()
````

**Параметры:** отсутствуют
**Результат:** объект соединения с БД

---

### 5.2. Класс `User` (модель данных)

**Назначение:**
Представление пользователя системы.

**Основные свойства:**

* `Id`  идентификатор пользователя;
* `Login`  логин;
* `PasswordHash`  хэш пароля;
* `Role`  роль пользователя;
* `FailedAttempts`  количество неудачных попыток входа;
* `IsLocked`  признак блокировки.

---

### 5.3. Класс `UserRepository`

**Назначение:**
Выполнение операций доступа к данным пользователей.

**Основные методы:**

```csharp
Task<User?> GetByLoginAsync(string login)

Получение пользователя по логину.

Task<List<User>> GetAllAsync()

Получение списка всех пользователей.

Task AddUserAsync(string login, string passwordHash, string role)

Добавление нового пользователя.

Task IncrementFailedAttemptsAndLockIfNeededAsync(long userId)

Увеличение счётчика попыток и блокировка при необходимости.

Task UnlockAsync(long userId)

Снятие блокировки учётной записи.


5.4. Класс PasswordService

Назначение: Хэширование и проверка паролей.

Методы:

string HashPassword(string password)

Хэширование пароля с использованием BCrypt.

bool Verify(string password, string hash)

Проверка соответствия пароля сохранённому хэшу.


5.5. Класс AuthService

Назначение: Реализация логики авторизации.

Основной метод:

Task<(bool ok, string message, User? user)> LoginAsync(
    string login,
    string password,
    bool captchaOk
)

Параметры:

  • login — логин пользователя;
  • password — введённый пароль;
  • captchaOk — результат прохождения капчи.

Результат:

  • признак успешной авторизации;
  • сообщение для пользователя;
  • объект пользователя.

5.6. Пользовательский контрол CaptchaPuzzleControl

Назначение: Реализация интерактивной капчи в виде пазла.

Основные элементы:

  • PictureBox;
  • TableLayoutPanel.

Свойства:

  • IsSolved — признак корректной сборки изображения.

5.7. Формы пользовательского интерфейса

  • LoginForm — форма авторизации;
  • UserForm — рабочий стол пользователя;
  • AdminForm — панель администратора.

Каждая форма реализует строго ограниченный набор функций в соответствии с ролью пользователя.

```