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 10 | GLPI 11 | JIT | Примечание |
|---|---|---|---|---|---|
glpisaml (DonutsNL) | SAML 2.0 | Да | Нет (ограничен 10.9.99) | Да | Поддерживаемый преемник phpsaml |
phpsaml (derricksmith) | SAML 2.0 | Устаревший | Нет | Да | Не развивается с 2022 года; избегать в новых проектах |
oauthsso | OpenID 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
- Регистрация приложений > Новая регистрация. Выберите тип учётных записей: один клиент (тенант) для вашей компании или несколько клиентов, если GLPI обслуживает заказчиков из других организаций. В поле URI перенаправления (платформа Web) вставьте адрес, который модуль показывает готовым к копированию, в формате
https://glpi.suaempresa.com/plugins/nextool/sso/ssologin/callback.

- Обзор: запишите идентификатор приложения (клиента) и идентификатор каталога (клиента/тенанта). В разделе Сертификаты и секреты создайте секрет клиента и сразу скопируйте значение: оно показывается только один раз. Запишите также дату истечения срока.

- Конфигурация токена: добавьте необязательные утверждения
emailиupnв токен ID. Чтобы назначать профиль по группе, используйте Добавить утверждение групп, отметьте Группы безопасности и оставьте Идентификатор группы.


- Разрешения API: Microsoft Graph
email,profileиUser.Read, делегированные. Без согласия администратора каждый пользователь подтверждает доступ при первом входе.
В GLPI
- Настройки > SSO Login > Добавить: провайдер Microsoft Entra ID, идентификатор клиента, секрет и тенант (идентификатор каталога). Для нескольких организаций используйте тенант
organizationsсо списком допустимых тенантов или, если вы обслуживаете любых заказчиков, опцию приёма любого тенанта. - Поле первичного сопоставления:
upn. При первом входе модуль ищет пользователя GLPI, у которого логин совпадает с upn; после этого привязка использует неизменный идентификатор учётной записи в Entra, и смена e-mail там не ломает вход. - Профиль по группе: в приложении укажите
groupsкак claim профилей и создайте правило назначения прав (Администрирование > Правила) с критерием Roles (claim), равным идентификатору объекта группы безопасности, и действием назначения профиля. Профиль назначается как динамический: кто выходит из группы, теряет профиль при следующем входе. - Проверьте и включите: вкладка Тест приложения проверяет конфигурацию и ключи провайдера без входа в систему. Когда приложение активно, кнопка появляется на экране входа. Чтобы пропускать этот экран, включите Сразу переходить ко входу 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).
- App registrations > New registration. Имя «GLPI»; поддерживаемые учётные записи: только ваш тенант (single tenant), если вы не обслуживаете несколько организаций.
- Redirect URI (тип Web): callback плагина —
https://glpi.suaempresa.com/plugins/oauthsso/front/callback.php. - Certificates & secrets > New client secret. Запишите значение (показывается один раз) и, главное, дату истечения срока.
- Token configuration: убедитесь в наличии claims
emailиpreferred_username(илиupn) — по ним GLPI сопоставляет пользователя. - 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.