Настройка OIDC-провайдеров
Spirit IAM — поставщик идентификации (IdP) в составе Sage и необходимый компонент для процессов аутентификации и авторизации. Для Sage Spirit IAM является конечным IdP: выдает токены и формирует профиль пользователя, а также предоставляет интерфейс для выдачи ролей и управления группами доступа. В текущем релизе в Spirit IAM нет интерфейса для управления учетными записями пользователей, поэтому в базовой поставке рядом с ним развертывается Keycloak, который выполняет аутентификацию и предоставляет такой интерфейс.
Чтобы пользователи входили в Sage через вашу систему управления доступом, подключите ее в качестве провайдера аутентификации через протокол OIDC вместо стандартного Keycloak. Управление пользователями при этом выполняет ваш провайдер, а Spirit IAM по мапперу преобразует данные о пользователе в его профиль.
Подключение OIDC-провайдера решает только задачу входа в Sage: выдать роль новому пользователю по-прежнему можно только в интерфейсе Spirit IAM.
Чтобы передавать данные о входе/регистрации или сведения о ролях внешним системам, настройте вебхуки.
Все действия выполняются внутри контейнера установщика sage-trukk на контрольном хосте. Изменения в конфигурацию вносите в соответствии с инструкцией Работа с файлами конфигурации.
Чтобы добавить OIDC-провайдера, выполните следующие шаги:
- Подготовьте OIDC-клиент и получите его параметры.
- Создайте Jsonnet-маппер, который преобразует
claimsпровайдера в профиль пользователя Spirit IAM. - Опишите провайдера в переменных конфигурации.
- Примените конфигурацию.
Шаг 1. Подготовка OIDC-клиента
-
Создайте OIDC-клиент в вашем провайдере аутентификации и получите его параметры:
client_id— публичный идентификатор клиента, под которым Spirit IAM обращается к провайдеру;client_secret— секрет клиента, подтверждающий, что запрос исходит именно от Spirit IAM;issuer_url— базовый адрес провайдера, от которого Spirit получает его конфигурацию и ключи для проверки подписи токенов.
-
Определите набор полномочий
scope, которые Spirit IAM запрашивает у провайдера при аутентификации. Запрашиваемый набор полномочий влияет на то, какие данные о пользователе провайдер включит в токен. Например:openid— обязательный для протокола OIDC;email— доступ к адресу электронной почты (основной идентификатор пользователя в Spirit IAM);profile— доступ к базовым данным профиля (имя, фамилия и прочее).
Обязательными являются openid и email. Полный набор полномочий зависит от того, какие данные нужны вашему мапперу, и от того, какие claims может вернуть провайдер. При необходимости список можно расширять.
Шаг 2. Создание Jsonnet-маппера
Jsonnet-маппер преобразует claims OIDC-провайдера в структуру профиля пользователя в Kratos. Для каждого провайдера нужен собственный маппер, поскольку набор claims у разных провайдеров отличается.
Разместите файл маппера в директории spirit/kratos внутри контейнера установщика на контрольном хосте.
Ниже приведен пример маппера для стандартного Keycloak, который развертывается вместе с Sage:
local claims = std.extVar('claims');
if std.length(claims.sub) == 0 then
error 'claim sub not set'
else {
identity: {
traits: {
email: claims.email, // обязателен для Spirit: основной идентификатор пользователя
preferred_username: claims.preferred_username, // имя пользователя в Spirit
given_name: if std.objectHas(claims, 'given_name') then claims.given_name else '', // имя; пусто, если провайдер его не передал
family_name: if std.objectHas(claims, 'family_name') then claims.family_name else '', // фамилия; пусто, если провайдер ее не передал
name: if std.objectHas(claims, 'name') then claims.name else '', // полное имя; пусто, если провайдер его не передал
},
},
}
Шаг 3. Описание провайдера в переменных конфигурации
-
В конфигурационном файле, например,
group_vars/sage/spirit_iam-apps.yml, определите п еременнуюsage_spirit_oidc_providers. В полеmapper_urlукажите полный путь к мапперу, созданному на шаге 2:file:///etc/config/kratos/{имя_файла_маппера}.Подробнее о настройках см. в документации ORY Kratos (selfservice.methods.oidc), а также в Справочнике переменных.
Пример настройки для Keycloak:
sage_spirit_oidc_providers:- id: keycloak # внутренний идентификатор провайдераlabel: "Keycloak" # название, которое увидит пользователь при входеprovider: generic # тип провайдераclient_id: "ID" # client_id, полученный на шаге 1client_secret: "SECRET" # client_secret, полученный на шаге 1scope: # полномочия, запрашиваемые у провайдера (см. шаг 1)- openid- email- profileissuer_url: "https://example.org/realms/sage" # issuer_url (см. шаг 1)mapper_url: file:///etc/config/kratos/oidc.keycloak.jsonnet # путь до маппера -
Определите переменную
sage_oidc_provider— укажите в ней иде нтификатор провайдера, на которого Sage перенаправляет пользователя при входе. Значение должно совпадать со значениемidиз переменнойsage_spirit_oidc_providers(в примере выше —keycloak).Если подключено несколько провайдеров, то именно эта переменная определяет, на какого из них Sage направит пользователя при входе по умолчанию.
Шаг 4. Применение конфигурации
Чтобы применить изменения к компонентам Spirit IAM, запустите плейбук установки в режиме update с тегами apps и spirit_iam:
export SAGE_DEPLOY_MODE=update
ansible-playbook sage-setup.yml --tags apps,spirit_iam
Подробнее о режимах установки см. в статье Работа с файлами конфигурации, о переходе на новую версию — в Руководстве по обновлению.
После применения конфигурации на странице Spirit появится кнопка входа через добавленного провайдера.
OIDC-провайдер передает Spirit IAM только те данные, которые входят в claims. Если вам требуется уведомить внешние системы о входе или регистрации пользователя (например, для аудита операций) либо передать сведения о ролях и полномочиях пользователя из Spirit IAM, дополнительно настройте вебхуки.