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

Аутентификация в панели управления

Однопользовательский и многопользовательский режимы

Панель управления поддерживает 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": true
}

Активация происходит аналогично, но с параметром "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-аутентификации к конкретному тенанту. Пользователь после аутентификации будет попадать в соответствующий тенант.

Пример:

{
    "type": "LDAP",
    "tenantName": "ldapTenant",
    "parameters": {
       ...
    }
}

Параметр tenantName указывает, к какому тенанту относится LDAP-аутентификация.

Важно

Пользователь с ролью superAdmin может существовать только в тенанте по умолчанию. Если для такого пользователя настроен фильтр роли, но способ аутентификации относится не к тенанту по умолчанию, то его аутентификация не будет выполнена.

Примеры входа в систему в зависимости от способа аутентификации

Стандартная аутентификация

  • Отправка запроса на вход в систему:

    {
      "email": "name.surname",
      "password": ""
    }
    
  • Опционально, имеется возможность явно указать тип для стандартной аутентификации:

    {
      "email": "name.surname",
      "password": "",
      "authentication": {
        "type": "Standard"
      }
    }
    

LDAP‑аутентификация

  • Отправка запроса на вход в систему, если существует несколько способов аутентификации через LDAP:

    {
      "email": "name.surname",
      "password": "",
      "authentication": {
        "type": "LDAP",
        "parameters": {
          "label": "ldap1"
        }
      }
    }
    
  • В случае, когда LDAP‑аутентификация единственная, параметр label необязателен. Тогда отправка запроса на вход выглядит следующим образом:

    {
      "email": "name.surname",
      "password": "",
      "authentication": {
        "type": "LDAP"
      }
    }