Вход и роли¶
Режимы входа¶
Режим задаётся переменной NEOMSA_ESB_AUTH_MODE.
| Режим | Что видит пользователь | Как ведёт себя сервер |
|---|---|---|
local (по умолчанию) |
Форму логина и пароля | Токены провайдера не принимаются (ответ 401) |
sso |
Кнопку «Войти через SSO» | Локальный вход закрыт (ответ 403), локальные пользователи не создаются |
sso+local |
Форму и кнопку «Войти через SSO» | Работают оба способа, в том числе в одном браузере |
Режим сам включает и выключает приём токенов провайдера, отдельный переключатель не нужен. В режимах sso и sso+local провайдер должен быть доступен при старте платформы.
Подключение Keycloak¶
В провайдере нужны два клиента:
- Публичный клиент для интерфейса, например
neomsa-esb-frontend. Разрешите стандартный поток (Authorization Code с PKCE) и укажитеredirectUrisна адрес платформы. Implicit-поток не нужен. - Конфиденциальный клиент для сервера, например
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 |
Вход в платформу |
Проверка ролей на сервере сейчас есть только у управления пользователями и ролями. Остальные операции (создание, изменение и удаление проектов, сборка, развертывание) доступны любому вошедшему пользователю. Ограничивайте круг пользователей платформы на стороне провайдера.
