Пользователи и группы (расширенная функциональность)¶
Группы ¶
Обзор¶
Группы пользователей позволяют массово задать права и авторизации пользователей.
| Поле | Название | Описание | Обязательное |
|---|---|---|---|
| name | Имя | Уникальное имя группы | Да |
| permissions | Разрешения | Список разрешений группы |
Разрешения ¶
Для каждого объекта в системе создаются разрешения can_add, can_change, can_delete (подробнее в описании самих объектов).
Для каждого параметра в системе автоматически создаются разрешения на просмотр ("can view" + название параметра) и редактирование ("can_edit" + название параметра), которые также настраиваются через разрешения группы (доступны в общем списке).
Замечание: В следующих версиях планируется реализовать другой подход к разрешению на редактирование параметров
Профиль группы¶
Область видимости ¶
В профиле группы прописана "область видимости" группы - это ограничения в терминах иерархии, в рамках которых пользователи группы могут работать с данными.
Например,
для группы "Бренд-менеджер Stickers" доступны товары бренда Stickers во всех клиентах,
для группы "Бренд-менеджер Stars" доступны товары бренда "Stars" во всех клиентах,
для группы "Менеджер по работе с клиентом X5" доступны все товары всех брендов в клиенте X5 и т.д.
Область видимости группы может быть более сложной
Например,
для группы "Планировщик Stickers/X5" доступны товары бренда "Stickers" в клиенте "X5"
Пользователь может принадлежать к нескольким группам, в этом случае разрешения и области видимости будут складываться по логическому правилу "ИЛИ" (если хотя бы в одной группе есть разрешение, пользователь получает его независимо от разрешений других групп)
Например,
если пользователь принадлежит к группам "Планировщик Stickers/X5" и "Планировщик Stars/Dixy",
то ему будут доступны товары бренда "Stickers" в клиенте "X5" и товары бренда "Stars" в клиенте "Dixy"
Обратите внимание: некоторые сочетания могут приводить к "неожиданным результатам"
Например,
пользователь с группами "Планировщик Stickers/X5" и "Менеджер по работе с клиентом X5",
получит доступ КО ВСЕМ товарам для клиента "X5",
так как права будут складываться через "или", а группа "Менеджер по работе с клиентом X5" не содержит ограничений на товары
Пользователь с группами "Планировщик Stickers/X5" и "Менеджер по работе с клиентом Dixy",
получит доступ к товарам бренда "Stickers" в клиенте "X5", и ко всем товарам в клиенте "Dixy"
Пользователь с группами "Планировщик Stickers" и "Менеджер по работе с клиентом X5"
получит доступ к товарам бренда "Stickers" во всех клиентах и всем товарам в клиенте "Dixy"
Обратите внимание: область видимости группы определяется не её названием, а тем фильтром, который прописан в профиле группы.
При этом рекомендуется использовать шаблоны групп для создания групп, фильтры будут создаваться автоматически.
Шаблоны групп ¶
В разделе "Группы" некоторые группы могут содержать ключ уровня иерархии, заключённый в фигурные скобки.
Например,
Бренд-менеджер {brand}
Менеджер клиента {client}
Планировщик {brand}/{client}
При "синхронизации" вместо ключа автоматически создадутся группы для каждого элемента иерархии, доступного в настоящий момент для соответствующего уровня.
Для каждой группы автоматически будет определена область видимости, соответствующая элементам иерархии.
Синхронизация не удаляет ранее созданные группы, но обновляет фильтры в области видимости, если они были изменены.
Создание групп по шаблону из интерфейса администратора¶
В списке групп выберите шаблон, кликнув по окошку слева от названия группы (для выбора можно воспользоваться текстовым поиском в верхней части экрана). В выпадающем списке "Действия" выберите "Создать группы по шаблону", после чего нажмите кнопку "Выполнить" справа от выпадающего меню. Дождитесь обновления страницы, группы по шаблону будут созданы.
Создание групп по шаблону с помощью сценария ¶
Для создания группы по шаблону из консоли или через API можно использовать сценарий "Создать группы по шаблону" (запуск через пользовательский интерфейс для этого сценария не реализован).
Сценарий принимает следующие аргументы:
"""
:param id:
int. id группы.
:param name:
str. Имя группы или шаблона.
:param ids:
list of int. Список id групп (если нужно экстрактировать из нескольких).
:param names:
str. Список имён групп (если нужно экстрактировать из нескольких).
"""
Комментарий для разработчика: planiqum.core.authcustom.scripts.extract_groups_from_template.extract_groups_from_template
Пользователи ¶
Профили пользователей доступны в разделе Пользователи и группы (расширенная функциональность) > Пользователи панели администратора.
Описание полей¶
| Поле | Название | Описание |
|---|---|---|
| username | Имя | Уникальное имя пользователя. |
| sso | SSO | Используемая единая система аутентификации (подробнее см SSO |
| sso_login | Имя пользователя SSO | Имя пользователя для единой системы аутентификации |
| ldap_username | Имя пользователя LDAP | Имя пользователя, используемое при аутентификации через LDAP (подробнее см LDAP |
| password | Пароль | Хэш пароля пользователя. |
| first_name | Имя | Имя пользователя. |
| last_name | Фамилия | Фамилия пользователя. |
| Электронная почта пользователя. | ||
| is_staff | Статус персонала | Логический флаг, определяющий, является ли пользователь членом персонала. |
| is_active | Активный | Логический флаг, определяющий активность учетной записи пользователя. |
| is_superuser | Статус суперпользователя | Логический флаг, определяющий наличие у пользователя прав суперпользователя. |
| groups | Группы | Список групп, к которым относится пользователь (разрешения объединяются через ИЛИ) |
| permissions | Права пользователя | Права доступа к объектам системы и права на просмотр/редактирование параметров |
| date_joined | Дата регистрации | Дата регистрации пользователя. |
| last_login | Последний вход | Время последнего входа пользователя в систему. |
Разделение прав на просмотр и редактирование параметров ¶
В разделе "группы" определяется список групп, к которым относится пользователь.
В группах задаются "зоны видимости", которые определяют "к каким разделам иерархии у пользователя есть доступ" (например, "Планировщик Стикерс/X5", "Бренд-менеджер Старс", "Менеджер клиента Dixy" и т.д.)
Может ли пользователь только просматривать или просматривать и редактировать данные в конкретном параметре в рамках "зоны видимости" определяется наличием или отсутствием у него прав can_view/can_edit для этого параметра.
Система позволяет ограничить "область редактирования" для пользователя.
В разделе "Зона редактирования (группы)" можно указать группы, которые ограничат область редактирования пользовтеля по сравнению с областью видимости (для параметров с разрешением can_edit).
Если в этом разделе пусто "зона редактирования" совпадает с "зоной видимости"
Замечание: В настоящий момент ведётся работа над функциональностью, которая позволит выдвать пользователям разные "зоны видимости" и "зоны редактирования" для разных параметров или мер
Есть возможность указать область видимости и область редактирования непосредственно для пользователя, не используя механизм групп.
Предупреждение: Этот механизм будет отключён в следующих версиях
Используйте группы для определения "области видимости" и "области редактировния"
Аутентификация пользователей¶
Способы аутентификации¶
В системе поддерживается несколько способов аутентификации пользователей:
- Локальная база данных (стандартная аутентификация)
- Single Sign-On (SSO)
- LDAP
- Azure Active Directory
- Omada IDM
- LDAP через переменные окружения (устаревший способ)
Настройка SSO¶
Добавление способа аутентификации¶
Для настройки нового способа аутентификации через SSO:
- В панели администратора перейдите в раздел "SSO"
- Нажмите "Добавить SSO"
- Заполните основные поля:
- Имя - уникальное название для этого способа аутентификации
- Тип - выберите один из доступных типов:
- LDAP
- Azure AD
- Omada IDM
- Исключительно - если включено, этот способ будет использоваться для всех пользователей
- Нажмите "Сохранить и продолжить редактирование"
- После сохранения появятся дополнительные поля для настройки выбранного типа SSO:
Настройки для LDAP¶
- Server URI - URI LDAP-сервера (например, ldap://localhost:389)
- Base DN - базовый DN для поиска пользователей
Настройки для Azure AD¶
- Tenant ID - ID тенанта Azure AD
- Client ID - ID клиентского приложения
- Client Secret - секретный ключ приложения
Настройки для Omada IDM¶
- Server URL - URL сервера Omada
- Client ID - ID клиента
- Client Secret - секретный ключ
Определение имени пользователя¶
При аутентификации через SSO система определяет имя пользователя в следующем порядке:
sso_login- приоритетное поле для всех типов SSOldap_username- только для LDAP (устаревшее поле, рекомендуется использоватьsso_login)username- базовое поле пользователя
Важно: Поле
Fallback на email¶
Если аутентификация по username не удалась, система автоматически попробует аутентификацию по email (если SSO-провайдер поддерживает такую возможность):
- LDAP: Поддерживает аутентификацию по email
- Azure AD: Поддерживает аутентификацию по email
- Omada IDM: Поддерживает аутентификацию по email
При fallback на email в журнале попыток аутентификации будет зафиксировано:
- auth_method: "email"
- login_value: email пользователя
- sso_server: настройки SSO-сервера
Привязка SSO к пользователю¶
После создания SSO его можно привязать к пользователю:
- В панели администратора перейдите в раздел "Пользователи"
- Выберите пользователя или создайте нового
- В форме редактирования пользователя:
- Заполните поле "SSO" - выберите созданный ранее способ аутентификации
- Для LDAP укажите "Имя пользователя LDAP"
- Для Azure AD и Omada укажите "SSO Login"
- Сохраните изменения
После этого пользователь сможет входить в систему используя учетные данные выбранной SSO-системы.
Использование LDAP через переменные окружения ¶
!!! warning "Устаревший способ" Этот способ настройки LDAP является устаревшим. Рекомендуется использовать настройку через SSO:
1. Создайте новый SSO с типом "LDAP"
2. Укажите в настройках:
- Server URI (аналог AUTH_LDAP_SERVER_URI)
- Base DN (аналог AUTH_LDAP_BASE_DN)
3. Если требуется использовать LDAP для всех пользователей, включите опцию "Исключительно"
4. Для пользователей укажите их LDAP-имена в поле "Имя пользователя LDAP"
Процесс аутентификации¶
-
Заполнение формы входа Пользователь вводит имя пользователя и пароль в форму входа на сайте.
-
Проверка наличия учетной записи Система проверяет наличие учетной записи пользователя в базе данных приложения.
-
Выбор метода аутентификации На основе конфигурации системы выбирается метод аутентификации:
- Эксклюзивная SSO-система: Если в настройках указан эксклюзивный SSO-провайдер (приоритет 1)
- Привязанная SSO-система: Если у пользователя есть привязанный SSO-провайдер (приоритет 2)
-
Локальная база данных: Если пользователь не привязан к системе SSO (приоритет 3)
-
Определение имени пользователя для аутентификации
- Для SSO:
sso_login→ldap_username(только LDAP) →username -
Для локальной аутентификации: только
username(полеsso_loginигнорируется) -
Аутентификация через SSO
- Первая попытка: Аутентификация по определенному username
- Fallback на email: Если первая попытка не удалась и SSO поддерживает email-аутентификацию
-
Типы SSO:
- LDAP: Подключение к серверу LDAP
- Azure Active Directory: Запрос к Microsoft Graph API
- Omada IDM: Запрос через Omada API
-
Результат аутентификации
- При успехе пользователь получает доступ к системе
- При ошибке выводится сообщение об ошибке
- Все попытки логируются в журнал аутентификации
Настройка профиля пользователя¶
Для корректной работы аутентификации необходимо правильно настроить профиль пользователя:
| Поле | Имя | Комментарий |
|---|---|---|
| username | Имя пользователя | Уникальное имя для входа в систему |
| password | Пароль | Для локальной аутентификации |
| ldap_username | Имя пользователя LDAP | Для LDAP-аутентификации |
| sso_login | Имя пользователя SSO | Для Azure AD, Omada и LDAP |
| Может использоваться как имя пользователя для LDAP | ||
| sso | SSO | Выбор способа аутентификации |
| force_password_change | Принудительная смена пароля | Запрос смены пароля при входе |
При аутентификации через LDAP система определяет имя пользователя в следующем порядке:
1. Значение поля sso_login, если оно заполнено
2. Значение поля ldap_username, если оно заполнено
3. Значение поля email, если оно заполнено
4. Значение поля username как последний вариант
Это правило действует как для нового способа через SSO, так и для старого способа через переменные окружения.
Регистрация событий информационной безопасности (ИБ) ¶
В системе регистрируются события ИБ, связанные с изменениями профилей пользователей (включая пароль), разрешений на уровне групп, а также привязки пользователя к группам.
Комментарий для разработчика: planiqum/core/authcustom/signals.py
ИБ Уровни критичности ¶
Для событий информационной безопасности может быть определён "уровень критичности". Для каждого уровня критичности может быть установлен флаг "Регистрировать событие", события с таким уровнем критичности будут регистрироваться в журнале событий ИБ. На данный момент этот показатель используется только для фильтрации событий информационной безопасности в журнале событий. Пользователь с соответствующими правами может добавлять, редактировать и удалять уровни критичности. Уровни критичности могут быть присвоены существующим в системе ключам событий информационной безопасности.
ИБ Ключи событий ¶
Список событий информационной безопасности закреплён в системе и не подлежит изменению. Администратор может только присваивать уровни критичности ключам событий информационной безопасности.
| Название | Комментарий | Уровень критичности по уолчанию |
|---|---|---|
| group_permissions_changed | Изменение набора разрешений для группы | Критичность 2 |
| user_groups_changed | Изменение набора групп для пользователя | Критичность 2 |
| user_permissions_changed | Изменение набора разрешений пользователя | Критичность 2 |
| user_deleted | Удаление пользователя | Критичность 2 |
| user_created | Создание нового пользователя | Критичность 1 |
| user_changed | Изменение данных пользователя (любое из полей, включая пароль) | Критичность 1 |
ИБ Журнал событий ¶
События ИБ, перечисленные в предыдущем пункте регистрируются в журнале событий ИБ.
| Поле | Название | Комментарий | Обязательное |
|---|---|---|---|
| id | ID | Уникальный идентификатор, автоматически присваивается системой | Да |
| key | Ключ события | Связь с моделью InfoSecureEventKey, определяет тип события |
Да |
| name | Название | Название события | Да |
| changed_by | Внес изменения | Связь с пользователем, который внёс изменения | Нет |
| changed_by_ip | Внес изменения (IP) | IP-адрес пользователя, внёсшего изменения | Нет |
| changed_date | Дата изменения | Дата и время, когда были внесены изменения (автоматически) | Да |
| description | Описание | Дополнительное описание события | Нет |
Сессии ¶
Активные сессии пользователей. Прервать сессию можно, удалив запись из списка в панели администратора. При следующем запросе к серверу система запросит у пользователя логин и пароль.
| Поле | Название | Описание |
|---|---|---|
| pk | Уникальный идентификатор | Первичный ключ сессии |
| user | Пользователь | Ссылка на пользователя |
| ip | IP | IP-адрес устройства |
| device | Устройство | Информация об устройстве |
| os | ОС | Операционная система устройства |
| browser | Браузер | Используемый браузер |
| last_activity | Последняя активность | Время последней активности сессии |
Управление замещениями пользователя¶
Временный доступ и замещение ¶
Временное членство в группе¶
Система позволяет временно предоставить пользователю доступ к группе с указанием периода действия.
Настройка временного доступа¶
- Перейдите в раздел "Пользователи и группы > Временное членство в группе"
- Нажмите "Добавить временное членство в группу"
- Заполните поля:
- Пользователь - выберите пользователя
- Группа - выберите группу
- Дата начала - с какого числа предоставить доступ
- Дата окончания - до какого числа предоставить доступ
- Права - выберите права, которые будут предоставлены
- Параметры - выберите параметры, к которым будет предоставлен доступ
Особенности временного доступа¶
- Временный доступ может быть предоставлен как к правам, так и к параметрам
- Можно указать только дату начала (доступ будет предоставлен бессрочно)
- Можно указать только дату окончания (доступ будет предоставлен с момента создания)
- Если не указаны ни дата начала, ни дата окончания, доступ будет предоставлен бессрочно
- Права и доступ к параметрам предоставляются только на период действия временного членства
Замещение пользователей¶
Система позволяет настроить замещение одного пользователя другим на определенный период.
Настройка замещения¶
- Перейдите в раздел "Пользователи и группы > Замещения"
- Нажмите "Добавить замещение"
- Заполните поля:
- Замещаемый пользователь - пользователь, которого замещают
- Замещающий пользователь - пользователь, который замещает
- Дата начала - с какого числа действует замещение
- Дата окончания - до какого числа действует замещение
Особенности замещения¶
- Замещающий пользователь получает все права и доступ к параметрам замещаемого пользователя
- Замещение может быть настроено как с датами, так и бессрочно
- В период замещения замещающий пользователь может выполнять все действия от имени замещаемого
- Замещение не влияет на права, полученные замещающим пользователем через группы
Проверка прав доступа¶
Система автоматически проверяет: 1. Действительность временного членства в группе 2. Действительность замещения 3. Наличие необходимых прав у пользователя
При проверке прав учитываются: - Постоянные права из групп - Временные права из временного членства - Права, полученные через замещение
Примеры использования¶
Временное членство¶
# Пример предоставления временного доступа к параметру
membership = UserGroupMembership.objects.create(
user=user,
group=group,
start_date='2024-03-01',
end_date='2024-03-31',
parameters=[(parameter.id, None, None)]
)
Замещение¶
# Пример настройки замещения
substitution = UserSubstitution.objects.create(
user=substituted_user,
substitute=substituting_user,
start_date='2024-03-01',
end_date='2024-03-31'
)
Ограничения¶
- Временное членство:
- Нельзя предоставить доступ к параметрам, к которым у пользователя нет базового доступа
-
Временный доступ не может расширить права, полученные через группы
-
Замещение:
- Замещающий пользователь должен иметь базовые права на работу в системе
- Замещение не может быть настроено для суперпользователя
- Нельзя настроить циклическое замещение (A замещает B, B замещает A)
Управление замещениями через профиль пользователя¶
В административной панели (Django Admin) замещения можно просматривать и редактировать прямо из профиля пользователя:
- На странице редактирования пользователя отображаются две таблицы:
- Замещается — список замещающих выбранного пользователя
- Замещает — список пользователей, которых замещает выбранный пользователь
- В этих таблицах можно добавлять, изменять и удалять замещения без перехода в отдельный раздел
- Это позволяет быстро управлять замещениями непосредственно при работе с профилем пользователя
Данная возможность реализована с помощью inline-таблиц (OriginalUserInline и SubstituteUserInline) в настройках админки
Для разработчика¶
Архитектура аутентификации¶
Система аутентификации построена на основе нескольких бэкендов, каждый из которых отвечает за свой метод аутентификации:
- Django ModelBackend (
CustomModelBackend) - Стандартная аутентификация Django
- Проверяет учетные данные в локальной базе данных
-
Используется как fallback, если другие методы недоступны
-
LDAP Backend (
LDAPBackend) - Реализован в
authentification_ldap.py - Использует библиотеку
python-ldap -
Поддерживает конфигурацию через переменные окружения
-
SSO Backend (
SSOBackend) - Реализован в
authentification_sso.py - Поддерживает несколько провайдеров SSO
- Использует стратегию выбора провайдера на основе конфигурации
Модели данных¶
-
SSO
class SSO(Model): TYPE_CHOICES = [ ('ldap', 'LDAP'), ('azure', 'Azure AD'), ('omada', 'Omada IDM') ] name = models.CharField(max_length=255) type = models.CharField(max_length=50, choices=TYPE_CHOICES) exclusive = models.BooleanField(default=False) -
Провайдер-специфичные модели
SSOLDAP: Настройки LDAP-подключенияSSOAzure: Настройки Azure ADSSOOmada: Настройки Omada IDM
Процесс аутентификации¶
- Инициализация
- Система получает учетные данные пользователя
-
Проверяет наличие пользователя в базе данных
-
Выбор метода
def authenticate(self, request, username=None, password=None, **kwargs): user = User.objects.get(username=username) exclusive_sso = SSO.objects.filter(exclusive=True).first() if exclusive_sso: return self._authenticate_sso(user, password, exclusive_sso) elif user.sso: return self._authenticate_sso(user, password, user.sso) else: return self._authenticate_local(user, password) -
SSO-аутентификация
- Каждый провайдер имеет свой метод аутентификации
- Реализовано через отдельные методы в
SSOBackend - Поддерживает расширение для новых провайдеров
Добавление нового провайдера SSO¶
Для добавления нового провайдера SSO необходимо:
-
Создать модель настроек провайдера:
class SSONewProvider(models.Model): sso = models.OneToOneField(SSO, on_delete=models.CASCADE, primary_key=True) # Специфичные для провайдера поля -
Добавить тип в
SSO.TYPE_CHOICES -
Реализовать метод аутентификации в
SSOBackend:def _authenticate_new_provider(self, sso_login, password, provider_settings): # Логика аутентификации -
Обновить метод
_authenticate_ssoдля поддержки нового провайдера
Безопасность¶
- Хранение учетных данных
- Пароли никогда не хранятся в открытом виде
- Секретные ключи провайдеров хранятся в зашифрованном виде
-
Поддерживается история паролей
-
Защита от атак
- Реализована защита от брутфорс-атак
- Ведется журнал попыток входа
-
Поддерживается блокировка по IP
-
Аудит
- Все действия с аутентификацией логируются
- Поддерживается отслеживание активных сессий
- Реализован механизм принудительного завершения сессий
Настройка профиля пользователя в панели администратора Django¶
Для корректного функционирования системы администратор должен заполнить определенные поля в профиле пользователя. Вот список обязательных полей и рекомендации по их заполнению:
Поля профиля пользователя¶
| Поле | Имя | Комментарий |
|---|---|---|
| username | Имя пользователя | Уникальное имя для входа в систему |
| password | Пароль | Для локальной аутентификации |
| ldap_username | Имя пользователя LDAP | Для LDAP-аутентификации |
| sso_login | Имя пользователя SSO | Для Azure AD, Omada и LDAP |
| Может использоваться как имя пользователя для LDAP | ||
| sso | SSO | Выбор способа аутентификации |
| force_password_change | Принудительная смена пароля | Запрос смены пароля при входе |
Рекомендации по настройке¶
- Выбор метода аутентификации
- Для локальной аутентификации достаточно заполнить username и password
- Для LDAP необходимо указать ldap_username
-
Для SSO нужно выбрать провайдера в поле sso и указать sso_login при необходимости
-
Эксклюзивный режим SSO
- Если в системе настроен эксклюзивный SSO, он будет использоваться для всех пользователей
- Локальные пароли в этом режиме игнорируются
-
Можно настроить только один эксклюзивный SSO
-
Безопасность
- Регулярно проверяйте настройки SSO-провайдеров
- Используйте принудительную смену пароля при первом входе
- Следите за журналом попыток входа
Добавление способов аутентификации¶
В этой модели хранятся именованные способы реализации SSO, которые можно использовать в профиле пользователя. Этот механизм только проверяет пароль пользователя во внешней системе согласно настройкам. Он не создаёт пользователей на основании данных из внешних систем.
| Поле | Название | Описание | Обязательное |
|---|---|---|---|
| name | Имя | Уникальное имя метода аутентификации | Да |
| type | Тип | Тип аутентификации ('LDAP', 'Azure AD', 'Omada IDM') | Да |
| exclusive | Исключительно | Если True, этот SSO будет использоваться для всех пользователей | Нет |
Настройка провайдеров SSO¶
- LDAP
- server_uri: URI LDAP-сервера (например, ldap://localhost:389)
-
base_dn: Базовый DN для поиска пользователей
-
Azure AD
- tenant_id: ID тенанта Azure AD
- client_id: ID клиентского приложения
-
client_secret: Секретный ключ приложения
-
Omada IDM
- server_uri: URI сервера Omada
- client_id: ID клиента
- client_secret: Секретный ключ
При создании новой конфигурации SSO: 1. Укажите "Тип" и сохраните изменения 2. После сохранения появятся дополнительные поля для выбранного типа 3. Заполните все обязательные поля для выбранного провайдера 4. Проверьте работоспособность аутентификации с тестовым пользователем
Журнал попыток аутентификации ¶
В системе реализован отдельный журнал для аудита всех попыток входа пользователей (локальная и SSO-аутентификация).
Где искать журнал¶
Журнал доступен в административной панели Django:
- Раздел: Пользователи и группы (расширенная функциональность) > Журнал попыток аутентификации (модель
AuthAttemptLog). - Также может называться "Журнал попыток входа" или "Authentication Attempts" в зависимости от локализации.
Какие колонки содержит¶
В журнале отображаются основные поля:
- Пользователь — ссылка на профиль пользователя (если найден).
- Имя пользователя — логин, использованный при попытке.
- SSO — использованный SSO-провайдер (если применимо).
- Информация об аутентификации — JSON-структура с деталями:
auth_method: способ аутентификации ("username" или "email")login_value: фактическое значение, использованное для входаsso_server: настройки SSO-сервера (без секретных данных)- Настройки SSO — параметры подключения (например, server_uri, base_dn для LDAP; tenant_id, client_id для Azure и т.д.).
- IP-адрес — адрес, с которого была совершена попытка.
- User-Agent — строка браузера/клиента.
- Результат — успешна ли попытка (да/нет).
- Тип ошибки — классифицированный тип ошибки (connection, credentials, timeout и др.).
- Сообщение об ошибке — оригинальный текст ошибки, если попытка не удалась.
- Время — дата и время попытки.
Доступные фильтры¶
Можно фильтровать журнал по:
- пользователю;
- имени пользователя (логину);
- SSO-провайдеру;
- успешности попытки (да/нет);
- дате/времени;
- IP-адресу;
- наличию ошибок.
Как происходит регистрация попыток¶
Каждая попытка входа (успешная и неуспешная) автоматически фиксируется системой. В журнале сохраняется:
- Способ аутентификации: "username" или "email" (в зависимости от того, что использовалось)
- Фактический логин: значение, которое было использовано для входа (определяется по приоритету)
- Настройки SSO: параметры подключения к SSO-серверу (без секретных данных)
- Результат: успех/ошибка
- Классификация ошибок: тип ошибки (connection, credentials, timeout, server_error, technical, user_not_found, unknown)
- Оригинальное сообщение об ошибке: полный текст ошибки для детального анализа
- Технические детали: IP-адрес, user-agent, время попытки
- Ссылка на пользователя: если пользователь найден в системе
Типы ошибок в журнале¶
Система автоматически классифицирует ошибки аутентификации:
connection— ошибки подключения к серверу (соединение отклонено, сеть недоступна)timeout— таймауты соединения (превышено время ожидания)credentials— неверные учетные данные (неправильный логин или пароль)user_not_found— пользователь не найден в системеserver_error— ошибки сервера (5xx HTTP коды)technical— технические ошибки системыunknown— неклассифицированные ошибки (оригинальное сообщение сохраняется)
Это позволяет отслеживать все попытки входа, выявлять подозрительную активность, расследовать инциденты и проводить аудит безопасности.
За более подробной технической информацией обращайтесь к разделу для разработчиков.