Аутентификация в панели управления¶
Однопользовательский и многопользовательский режимы¶
Панель управления поддерживает 2 режима: однопользовательский (single-user mode) и многопользовательский (multi-user mode).
Однопользовательский режим доступен пользователю по умолчанию при первом запуске экземпляра solidpoint-backend. В системе присутствует только один пользователь admin@solidpoint.local с ролью суперадминистратора без пароля (пользователь по умолчанию).
Использование данного режима запрещает использование токенов и следующей функциональности:
- работу с аутентификацией и необходимые проверки LDAP-сервера;
- создание нового пользователя (
POST /api/users); - обновление данных пользователя (
PATCH /api/users/:id); - активацию пользователя по ID (
PUT /api/users/:id/activate); - активацию пользователя по email (
PUT /api/users/:email/activate); - активацию пользователей (
PUT /api/users/activate); - удаление пользователя (
DELETE /api/users/:id).
Многопользовательский режим активируется после задания пароля для пользователя по умолчанию (PUT /api/users/current/password). Данный режим разблокирует всю функциональность, описанную выше.
Многопользовательский режим подразумевает работу не только множества пользователей, но и работу этих пользователей в различных организациях. Каждой организации соответствует свой тенант, которому доступна определенная видимость ресурсов (свои цели, сканирования и т.д.).
Каждый пользователь имеет определённую роль. Подробнее в разделе «Роли и права доступа».
Способы аутентификации¶
Панель управления поддерживает 2 способа аутентификации: стандартный и LDAP.
- Стандартная аутентификация предполагает использование
emailиpasswordдля верификации. - LDAP-аутентификация предполагает использование
loginиpasswordпользователя LDAP-сервера для верификации.
Если стандартная аутентификация доступна по умолчанию, то все остальные способы настраиваются отдельно. Каждый из способов аутентификации может быть включен, отключен или удален (если не единственный активный), однако создать или удалить стандартную аутентификацию нельзя (является единственной).
HTTP API для управления способами аутентификации:
| Запрос | Роль пользователя | Описание |
|---|---|---|
POST /api/auth |
superAdmin |
Создание способа аутентификации |
PATCH /api/auth/:id |
superAdmin |
Обновление способа аутентификации |
GET /api/auth |
superAdmin |
Получение доступных способов аутентификации |
GET /api/auth/:id |
superAdmin |
Получение определенного способа аутентификации по ID |
DELETE /api/auth/:id |
superAdmin |
Удаление определенного способа аутентификации по ID |
GET /api/auth/available |
Аутентификация не требуется | Получение справочной информации о доступных способах аутентификации с минимальным набором данных |
Пример деактивации способа аутентификации PATCH /api/auth/:id:
Активация происходит аналогично, но с параметром "disabled": false.
При деактивации любого способа аутентификации сессии всех ее пользователей завершаются, доступ ограничивается.
Если стандартная аутентификация отключена, а доступ, например, к единственной настроенной LDAP-аутентификации по какой-либо причине утерян, восстановление доступа к стандартной аутентификации штатными средствами невозможно.
Создание LDAP-аутентификации¶
Пример создания LDAP-аутентификации POST /api/auth:
{
"type": "LDAP",
"parameters": {
"label": "ldap",
"host": "example.test",
"port": 636,
"baseDN": "ou=users,dc=example,dc=test",
"uid": "uid",
"defaultAttributes": true,
"tls": true,
"roles": {
"superAdmin": "objectClass=inetOrgPerson"
}
}
}
Поле parameters из примера выше отвечает за параметры LDAP-аутентификации. Данные параметры приведены в таблице ниже.
| Параметр | Тип | Обязательный параметр | Значение по умолчанию | Описание |
|---|---|---|---|---|
label |
string |
да | не задано | Метка настройки LDAP-аутентификации |
host |
string |
да | не задано | Хост LDAP-сервера |
port |
uint32 |
да | не задано | Порт LDAP-сервера |
baseDN |
string |
да | не задано | База поиска. Объект каталога, который указывает, где хранятся пользователи |
uid |
string |
да | не задано | Атрибут, который указывает на уникальный идентификатор пользователя, используемый при входе. Например, если "uid": "uid", как из примера выше: uid=exampleUserLogin. Если "uid": "sAMAccountName", то: sAMAccountName=exampleUserLogin |
login |
string |
нет | не задано | Логин пользователя по умолчанию, от лица которого будет вестись аутентификация пользователей (поиск, сопоставление и т.д.). В случае отсутствия пользователя по умолчанию аутентификация считается анонимной |
password |
string |
нет | не задано | Пароль пользователя по умолчанию. Используется в связке с параметром login |
emptyPassword |
string |
нет | не задано | Параметр, регулирующий использование пустого пароля для пользователя по умолчанию. Используется в связке с параметром login при пустом параметре password |
filter |
string |
нет | не задано | Фильтр пользователей. Например: &(uid=exampleUserLogin)(exampleUserFilter), где значение exampleUserFilter является фильтром |
attributes |
object |
нет | См. ниже | Дополнительные атрибуты пользователя |
defaultAttributes |
boolean |
нет | false |
Параметр, регулирующий использование дополнительных атрибутов по умолчанию |
tls |
boolean |
нет | false |
Параметр, регулирующий использование протокола TLS |
roles |
object |
нет | не задано | Параметр, сопоставляющий локальные пользовательские роли с пользовательскими ролями LDAP-сервера. Из примера выше видно, что для получения локальной роли superAdmin пользователь LDAP-сервера должен относиться к классу inetOrgPerson (составляется в виде фильтров) |
Объект attributes¶
Объект attributes содержит поля, связанные с персональными данными пользователя. Данные поля приведены в таблице ниже.
| Поле | Тип | Значение по умолчанию (при defaultAttributes: true) |
Описание |
|---|---|---|---|
email |
[]string |
mail, email, userPrincipalName |
Атрибут, по которому будет получен пользовательский email |
name |
[]string |
cn, displayName |
Атрибут, по которому будет получено пользовательское имя |
firstName |
[]string |
givenName |
Атрибут, по которому будет получено пользовательское имя (в случае отсутствия атрибута name) |
lastName |
[]string |
sn |
Атрибут, по которому будет получена пользовательская фамилия (при наличии атрибута firstName и отсутствии атрибута name). Если указаны и получены оба атрибута firstName и lastName, конечное имя пользователя будет их сочетанием |
Есть возможность указать принадлежность LDAP-аутентификации к конкретному тенанту. Пользователь после аутентификации будет попадать в соответствующий тенант.
Пример:
Параметр tenantName указывает, к какому тенанту относится LDAP-аутентификация.
Важно
Пользователь с ролью superAdmin может существовать только в тенанте по умолчанию. Если для такого пользователя настроен фильтр роли, но способ аутентификации относится не к тенанту по умолчанию, то его аутентификация не будет выполнена.
Примеры входа в систему в зависимости от способа аутентификации¶
Стандартная аутентификация¶
-
Отправка запроса на вход в систему:
-
Опционально, имеется возможность явно указать тип для стандартной аутентификации:
LDAP‑аутентификация¶
-
Отправка запроса на вход в систему, если существует несколько способов аутентификации через LDAP:
-
В случае, когда LDAP‑аутентификация единственная, параметр
labelнеобязателен. Тогда отправка запроса на вход выглядит следующим образом: