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

Вход и роли

Режимы входа

Режим задаётся переменной NEOMSA_ESB_AUTH_MODE.

Режим Что видит пользователь Как ведёт себя сервер
local (по умолчанию) Форму логина и пароля Токены провайдера не принимаются (ответ 401)
sso Кнопку «Войти через SSO» Локальный вход закрыт (ответ 403), локальные пользователи не создаются
sso+local Форму и кнопку «Войти через SSO» Работают оба способа, в том числе в одном браузере

Режим сам включает и выключает приём токенов провайдера, отдельный переключатель не нужен. В режимах sso и sso+local провайдер должен быть доступен при старте платформы.

Страница входа в режиме sso+local

Подключение Keycloak

В провайдере нужны два клиента:

  1. Публичный клиент для интерфейса, например neomsa-esb-frontend. Разрешите стандартный поток (Authorization Code с PKCE) и укажите redirectUris на адрес платформы. Implicit-поток не нужен.
  2. Конфиденциальный клиент для сервера, например neomsa-esb-backend. Секрет этого клиента сервер использует в запросах к провайдеру. Во фронтенд-клиент его не добавляйте.

Группы пользователя должны попадать в access-токен. Подойдёт любой из двух способов:

  • mapper oidc-group-membership-mapper в выделенном scope клиента интерфейса с настройками groups, full.path = true, access.token.claim = true. Группы будут приходить всегда;
  • отдельный client scope с таким mapper. Если он подключён как Optional, запрашивайте его явно: NEOMSA_ESB_KEYCLOAK_SCOPE="openid groups". Если как Default, запрашивать не нужно.

Параметры в чарте:

- name: NEOMSA_ESB_AUTH_MODE
  value: "sso+local"
- name: NEOMSA_ESB_KEYCLOAK_URL          # базовый адрес Keycloak
  value: "https://sso.example.local"
- name: NEOMSA_ESB_KEYCLOAK_REALM
  value: "<realm>"
- name: NEOMSA_ESB_KEYCLOAK_FRONTEND_CLIENTID
  value: "neomsa-esb-frontend"
- name: NEOMSA_ESB_KEYCLOAK_BACKEND_CLIENTID
  value: "neomsa-esb-backend"
- name: NEOMSA_ESB_KEYCLOAK_BACKEND_SECRET
  valueFrom:
    secretKeyRef:
      name: neomsa-esb
      key: oidc-secret
- name: NEOMSA_ESB_KEYCLOAK_SCOPE
  value: "openid groups"
- name: NEOMSA_ESB_AUTH_GROUP_MAPPING
  value: "/esb-admins=platform-admin,/esb-developers=platform-developer,/esb-users=platform-user"

NEOMSA_ESB_KEYCLOAK_URL должен открываться и из браузера, и с сервера платформы, а сервер должен доверять сертификату провайдера. Путь /auth добавляйте, только если ваш Keycloak опубликован с ним: начиная с версии 17 его по умолчанию нет.

После подключения проверьте access-токен тестового пользователя: в нём должен быть claim groups с полными именами групп.

Сопоставление групп и ролей

NEOMSA_ESB_AUTH_GROUP_MAPPING перечисляет пары «группа провайдера = роль платформы» через запятую. Чтобы выдать одной группе несколько ролей, укажите её несколько раз.

Параметр По умолчанию Назначение
NEOMSA_ESB_AUTH_GROUP_CLAIM groups Claim токена со списком групп. Пустое значение ломает разбор групп, поэтому не задавайте его без нужды
NEOMSA_ESB_AUTH_DEFAULT_ROLE нет Роль для пользователей, чьи группы ни с чем не сопоставлены

Пользователь заводится в базе платформы при первом входе, с именем и почтой из токена. При каждом следующем входе роли обновляются по группам. Источник ролей для таких пользователей это провайдер: изменения ролей в разделе «Доступ» перезапишутся при следующем входе.

Если в токене нет claim с группами вовсе, роли пользователя не меняются, а в лог платформы пишется предупреждение:

Token has no 'groups' claim for user <имя>: roles are left as is.
Check the group mapper and requested scopes.

Обычно это значит, что в провайдере не подключён mapper или не запрошен scope. Если claim есть, но список групп пустой, у пользователя не будет ролей.

Роли в интерфейсе берутся с сервера (/ui/auth/me), а не из токена: в токене лежат группы провайдера, а решения принимаются по ролям платформы.

Роли

Роль Права
platform-admin Всё, включая разделы «Система» и «Доступ»
platform-developer Работа с проектами
platform-operator Отдельных прав в текущей версии нет
platform-user Вход в платформу

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