SSO-вход в GLPI через Azure AD (Entra ID): полное руководство

SSO в GLPI с Microsoft Entra ID (Azure AD): SAML в GLPI 10, OIDC в GLPI 11 и 12 с модулем SSO Login или oauthsso, профиль по группе Entra, JIT-провизионирование и чек-лист, который не даст входу упасть в продакшене.

В этой статьеРазделов: 8

SSO в GLPI с Microsoft Entra ID (Azure AD) избавляет от локальных паролей и централизует MFA в вашем тенанте. Но то, что отделяет стабильный вход от ночного дежурства, — это не клик по «SAML» в портале, а выбор правильного протокола для вашей версии GLPI и понимание того, что со временем истечёт.

SAML или OIDC? Решение начинается с версии GLPI

Entra ID предоставляет SSO по двум протоколам: SAML 2.0 и OpenID Connect (OIDC, поверх OAuth 2.0). GLPI не поддерживает ни один из них для входа «из коробки» — нужен плагин. И здесь кроется ловушка для тех, кто переходит на GLPI 11: самый поддерживаемый SAML-плагин сообщества, glpisaml, ограничен MAX_GLPI = 10.9.99. Сам автор заявляет, что он не совместим (и не будет совместим) с GLPI 11. Кто приходит на 11-ю версию в расчёте «просто переустановить SAML-плагин», упирается в стену.

На практике мы используем такую матрицу решений:

ПлагинПротоколGLPI 10GLPI 11JITПримечание
glpisaml (DonutsNL)SAML 2.0ДаНет (ограничен 10.9.99)ДаПоддерживаемый преемник phpsaml
phpsaml (derricksmith)SAML 2.0УстаревшийНетДаНе развивается с 2022 года; избегать в новых проектах
oauthssoOpenID ConnectДаДаДаПрагматичный путь в GLPI 11; в Entra есть нативный OIDC
SSO Login (модуль NexTool)OpenID ConnectНетДа (также в GLPI 12)ОпциональноMulti-tenant, профиль по группе Entra, прямой вход через страницу входа Microsoft

Итог: GLPI 10 работает с SAML (glpisaml) или OIDC (oauthsso); GLPI 11 и 12 — только OIDC. Для 11 и 12 мы рекомендуем модуль SSO Login от NexTool, описанный в следующем разделе. oauthsso, который Teclib распространяет в подписке GLPI Network, остаётся альтернативой в шагах 1–5. Разделы про обратный прокси, JIT и сопровождение актуальны для обоих.

Рекомендуемый путь в GLPI 11 и 12: модуль SSO Login

SSO Login — модуль NexTool для входа через Microsoft Entra ID, Google и любого провайдера OpenID Connect (Keycloak, Okta). Он закрывает проблемы, из-за которых с oauthsso чаще всего создают заявки: обслуживает несколько организаций в одном GLPI (multi-tenant, для MSP), назначает профиль по группе безопасности Entra уже при первом входе, учитывает настройку автоматического создания пользователей GLPI, при выходе завершает сеанс и в Microsoft и может отправлять пользователя сразу на страницу входа Microsoft, минуя экран GLPI.

В Entra ID

  1. Регистрация приложений > Новая регистрация. Выберите тип учётных записей: один клиент (тенант) для вашей компании или несколько клиентов, если GLPI обслуживает заказчиков из других организаций. В поле URI перенаправления (платформа Web) вставьте адрес, который модуль показывает готовым к копированию, в формате https://glpi.suaempresa.com/plugins/nextool/sso/ssologin/callback.
Регистрация приложения в Microsoft Entra ID для нескольких клиентов с разрешением всех клиентов и URI перенаправления SSO Login
Регистрация приложения для нескольких организаций с URI перенаправления, скопированным из модуля.
  1. Обзор: запишите идентификатор приложения (клиента) и идентификатор каталога (клиента/тенанта). В разделе Сертификаты и секреты создайте секрет клиента и сразу скопируйте значение: оно показывается только один раз. Запишите также дату истечения срока.
Обзор приложения в Entra ID с полями идентификатора приложения, идентификатора объекта и идентификатора каталога
Идентификаторы приложения и каталога вносятся в карточку приложения в GLPI (на изображении размыты).
  1. Конфигурация токена: добавьте необязательные утверждения email и upn в токен ID. Чтобы назначать профиль по группе, используйте Добавить утверждение групп, отметьте Группы безопасности и оставьте Идентификатор группы.
Панель изменения утверждения групп в Entra ID с отмеченными группами безопасности и выбранным идентификатором группы
Утверждение групп передаёт идентификаторы объектов групп безопасности пользователя.
Конфигурация токена в Entra ID с утверждениями email, groups и upn
Результат: email, upn и groups в токене ID.
  1. Разрешения API: Microsoft Graph email, profile и User.Read, делегированные. Без согласия администратора каждый пользователь подтверждает доступ при первом входе.

В GLPI

  1. Настройки > SSO Login > Добавить: провайдер Microsoft Entra ID, идентификатор клиента, секрет и тенант (идентификатор каталога). Для нескольких организаций используйте тенант organizations со списком допустимых тенантов или, если вы обслуживаете любых заказчиков, опцию приёма любого тенанта.
  2. Поле первичного сопоставления: upn. При первом входе модуль ищет пользователя GLPI, у которого логин совпадает с upn; после этого привязка использует неизменный идентификатор учётной записи в Entra, и смена e-mail там не ломает вход.
  3. Профиль по группе: в приложении укажите groups как claim профилей и создайте правило назначения прав (Администрирование > Правила) с критерием Roles (claim), равным идентификатору объекта группы безопасности, и действием назначения профиля. Профиль назначается как динамический: кто выходит из группы, теряет профиль при следующем входе.
  4. Проверьте и включите: вкладка Тест приложения проверяет конфигурацию и ключи провайдера без входа в систему. Когда приложение активно, кнопка появляется на экране входа. Чтобы пропускать этот экран, включите Сразу переходить ко входу SSO на вкладке настроек модуля; локальный администратор всегда может войти по адресу экрана входа с ?noAUTO=1 в конце.

Два отличия в эксплуатации по сравнению с oauthsso. Локальные учётные записи GLPI и администраторы не перехватываются внешним входом, если вы явно не разрешите это в приложении. А автоматическое создание пользователей учитывает настройку GLPI и происходит только при подтверждённом e-mail в разрешённом домене. Параметр Assignment required в Entra, описанный в шаге 5, остаётся хорошей практикой, чтобы ограничить круг тех, кто получает токен.

1. Регистрация приложения в Entra ID

Для OIDC путь в портале Entra ID — App registrations (регистрация приложения), а не Enterprise Application с «SAML»: вы регистрируете приложение и создаёте секрет (client secret).

  1. App registrations > New registration. Имя «GLPI»; поддерживаемые учётные записи: только ваш тенант (single tenant), если вы не обслуживаете несколько организаций.
  2. Redirect URI (тип Web): callback плагина — https://glpi.suaempresa.com/plugins/oauthsso/front/callback.php.
  3. Certificates & secrets > New client secret. Запишите значение (показывается один раз) и, главное, дату истечения срока.
  4. Token configuration: убедитесь в наличии claims email и preferred_username (или upn) — по ним GLPI сопоставляет пользователя.
  5. Enterprise Applications > ваше приложение > Properties: Assignment required = Yes. Это и есть ваш настоящий whitelist (подробнее в шаге 5).

2. Настройка GLPI (путь OIDC)

Распакуйте плагин в plugins/ (или marketplace/) и установите его из командной строки. Типичная ошибка здесь — запускать консоль от root: созданные файлы получают неправильного владельца, и следующее обращение через веб падает из-за прав. Запускайте от пользователя веб-сервера:

# GLPI 11: install and enable the plugin as the Apache user (www-data/apache)
php bin/console plugin:install oauthsso
php bin/console plugin:activate oauthsso

# oauthsso does NOT create its own table: it stores everything in glpi_configs,
# under the 'plugin:oauthsso' context (tenant id, client id, client secret).

На экране плагина (или напрямую в glpi_configs) укажите Tenant ID, Client ID и Client Secret зарегистрированного приложения. На экране входа GLPI появится кнопка «Login with Microsoft».

3. Ловушка с redirect за обратным прокси

Это заявка, которую мы чаще всего открываем при внедрении: GLPI стоит за Nginx/Apache, который терминирует TLS, и внутри видит запрос как http://. В результате он формирует callback с http://, Entra получает redirect URI, не совпадающий с зарегистрированным, и возвращает redirect_uri_mismatch — или пользователь попадает в петлю перенаправлений. Окончательное решение — зафиксировать базовый URL в базе данных:

-- Force the correct base URL (avoids an http:// callback behind the proxy)
UPDATE glpi_configs
SET value = 'https://glpi.yourcompany.com'
WHERE context = 'core' AND name = 'url_base';

-- GLPI caches config: clear the cache after changing it
-- php bin/console cache:clear

Убедитесь также, что прокси передаёт реальную схему — например, RequestHeader set X-Forwarded-Proto "https" в Apache или proxy_set_header X-Forwarded-Proto $scheme; в Nginx. Правильный базовый URL вместе с правильным заголовком устраняет петлю.

4. JIT: пользователь входит, но ничего не видит

Провизионирование Just-in-Time создаёт пользователя при первом входе — но не назначает профиль. Симптом классический: аутентификация проходит, пользователь входит и видит пустой экран («профиль не назначен»). В сопровождении это вторая по частоте причина обращений сразу после «SSO настроен». Диагностика — одна строка SQL:

-- SSO users (external authentication) that ended up WITHOUT a profile:
-- they log in, but land on an empty screen.
SELECT u.id, u.name, u.authtype
FROM glpi_users u
LEFT JOIN glpi_profiles_users pu ON pu.users_id = u.id
WHERE pu.id IS NULL
  AND u.is_deleted = 0;

Результат показывает ровно тех, кому нужен профиль. Масштабируемое решение — правило назначения прав (Администрирование > Правила), которое выдаёт профиль по умолчанию всем, кто приходит через SSO, вместо ручной настройки для каждого нового пользователя.

5. Настоящий whitelist находится в Entra, а не в GLPI

Деталь, которую узнают только на практике, причём болезненно: oauthsso создаёт пользователя при первом входе и игнорирует флаг is_users_auto_add ядра GLPI. То есть любая действующая учётная запись тенанта, дошедшая до callback, становится пользователем GLPI. Бесполезно искать ограничение внутри GLPI — в плагине его нет. Реальный контроль — это Assignment required = Yes из шага 1: при включённом параметре Entra выдаёт токен только тем, кого вы явно назначили приложению. Это и есть ваш whitelist, управляемый в тенанте.

Замечание о группах: если вы хотите сопоставлять группу AD с профилем GLPI, учтите, что Entra передаёт группы как GUID, а не как читаемое имя. Либо используйте App Roles (имена, которые вы задаёте сами), либо переводите GUID в сопоставлении. Ожидать «ИТ» и получить 7a2f... — третий частый сюрприз.

Чек-лист сопровождения: что ломается в продакшене

SSO — это не «настроил и забыл». В нашей практике каждая среда с SSO попадает в реестр с мониторингом этих пунктов, потому что именно они обрушивают вход, хотя никто ничего не трогал:

  • Истечение client secret (OIDC) или сертификата подписи (SAML): причина номер 1 для «SSO вдруг перестал работать». Секрет в Entra истекает (от 6 до 24 месяцев); зафиксируйте дату и обновите заранее.
  • Часы сервера (SAML): у assertion есть окно действия; если время уплывёт, GLPI отклонит её с «assertion not yet valid». Держите NTP/chrony включённым (timedatectl status).
  • Смена URL/домена: изменился домен GLPI? Обновите redirect URI в Entra и url_base в базе данных в рамках одного деплоя.
  • Локальный резервный вход: держите хотя бы одну активную локальную учётную запись администратора. Если IdP упадёт, вы всё равно войдёте через обычный вход GLPI.

В NexTool мы настраиваем и сопровождаем SSO (Entra ID, Google Workspace и LDAP/AD) в средах GLPI наших клиентов, с документированным реестром сроков истечения и резервным входом — именно для того, чтобы вход не превращался в дежурство. Если хотите применить такую схему к вашей среде, обратитесь к нам по поводу сопровождения GLPI.


Проверено командой NexTool Solutions.

Часто задаваемые вопросы

Да, через OIDC (OpenID Connect), а не через SAML. Самый поддерживаемый SAML-плагин, glpisaml, ограничен MAX_GLPI 10.9.99. В 11-й и 12-й версиях есть два пути: модуль SSO Login от NexTool, который мы рекомендуем, и oauthsso, распространяемый Teclib в подписке GLPI Network.

В GLPI 10 работают оба: SAML через glpisaml, OIDC через oauthsso. В GLPI 11 и 12 используйте OIDC, потому что SAML-плагины не догнали эту версию. OIDC к тому же проще в эксплуатации с Entra, который нативно поддерживает OpenID Connect.

Да. Ядро GLPI не поддерживает вход по SAML/OIDC нативно (поддерживает LDAP/AD, CAS, x509 и «аутентификацию, переданную в HTTP-заголовке»). Для Entra ID: glpisaml (SAML, только GLPI 10), oauthsso (OIDC) или модуль SSO Login от NexTool (OIDC, GLPI 11 и 12).

Добавьте утверждение групп (Группы безопасности, Идентификатор группы) в регистрацию приложения. В модуле SSO Login укажите groups как claim профилей и создайте правило назначения прав с идентификатором объекта группы: профиль назначается уже при первом входе и снимается, когда пользователь выходит из группы.

В Entra, через Enterprise Applications > Properties > Assignment required = Yes: токен получают только те, кого вы назначили приложению. Это критично для oauthsso, который создаёт пользователя при первом входе и игнорирует is_users_auto_add ядра. Модуль SSO Login учитывает эту настройку GLPI и создаёт пользователя только при подтверждённом e-mail в разрешённом домене.

Это JIT без профиля: пользователь создан, но профиль ему не назначен. Диагностируйте через LEFT JOIN между glpi_users и glpi_profiles_users, найдя тех, у кого нет привязки, и настройте правило назначения прав (Администрирование > Правила), чтобы выдавать профиль по умолчанию всем, кто приходит через SSO.

Почти всегда дело в истечении срока: client secret OIDC (или сертификат подписи в SAML) просрочен, а в Entra они действуют от 6 до 24 месяцев. Другие причины: url_base с http:// за прокси (redirect_uri_mismatch) и рассинхронизация часов сервера в SAML. Фиксируйте дату истечения и держите NTP включённым.

Нужна помощь?