Интеграция с каталогом и SSO: где начинаются и заканчиваются Entra ID и LDAP

Подключение интранета к корпоративному каталогу — это две разные задачи: SSO подтверждает личность, каталог поставляет данные. Шаги настройки, принцип «сначала показать» и границы.

Самый тихий провал интранета живёт в списке пользователей. При запуске загружают таблицу из отдела кадров, и месяц все довольны; через полгода в списке остаются трое уволившихся, отсутствуют пятеро новых, и организационной структуре больше никто не верит. Это не проблема контента, а проблема источника истины: правда о штате живёт в другой системе.

Подключение к корпоративному каталогу это решает. Но «интеграция с каталогом» — не одна вещь, а две задачи, которые регулярно путают.

SSO подтверждает, каталог поставляет

Провести эту границу сразу — значит упростить все последующие решения.

SSO (SAML или OIDC) — задача аутентификации. Человек входит под корпоративной учётной записью, не держит отдельного пароля для интранета и теряет доступ в тот момент, когда эта учётная запись закрывается. Вопрос, на который отвечает SSO: «Действительно ли это тот человек, за кого он себя выдаёт?»

Сверка с каталогом — задача поставки данных. Она читает, кто работает, в каком подразделении и с какой должностью, и записывает это в профили интранета. Её вопрос другой: «Из кого сегодня состоит штат?»

Одно не заменяет другое. Если внедрить только SSO, вход станет удобнее, а каталог продолжит устаревать — потому что сотрудник, ни разу не входивший в систему, вообще не появится. Если внедрить только сверку, справочник останется актуальным, но каждый по-прежнему носит отдельный пароль. Зрелые установки используют оба механизма.

Сторона Entra ID

На стороне Microsoft Entra ID (прежнее название — Azure AD) настройка начинается с регистрации приложения. Интранет подключается к каталогу под собственной учётной записью через эту регистрацию; ничья личная учётная запись не используется.

Нужны три значения: идентификатор каталога (арендатора), идентификатор приложения (клиента) и клиентский секрет. Плюс разрешение: чтобы читать штат, приложению выдают User.Read.All, и эта выдача проходит через согласие администратора. Если шаг с согласием забыт, проверка соединения получает токен, но список пользователей возвращается пустым — поэтому добротная проверка не должна останавливаться на токене, ей следует действительно опросить конечную точку пользователей.

Отметьте также, что клиентский секрет имеет срок действия. Когда он истекает, интеграция останавливается молча; напоминание в календаре обходится дешевле, чем через полгода выяснять, почему синхронизация не работает.

Сторона LDAP / Active Directory

Если в организации есть классический Active Directory, соединение идёт по LDAP. Здесь требуется другое: адрес сервера, учётная запись с правами чтения (bind DN) и точка, с которой начинается поиск (base DN).

Две детали определяют большинство внедрений. Первая — шифрованное соединение: без LDAPS или StartTLS корпоративные учётные данные идут по сети в открытом виде. Вторая — отсев отключённых учётных записей: в Active Directory записи уволившихся обычно не удаляют, а отключают. Это состояние хранится битом в атрибуте userAccountControl; если не добавить его в фильтр, каждый уволившийся попадёт в интранет как «действующий сотрудник» — то есть воспроизведётся ровно та проблема, которую вы собирались решить, только теперь автоматически.

Сначала показать, потом применить

Самый пугающий сценарий таких интеграций — ошибка конфигурации, разом портящая штатный список. Ответ на неё — простая дисциплина: расхождение показывается первым, применение требует отдельного подтверждения.

На практике порядок такой: проверка соединения проходит, система сравнивает записи каталога с профилями интранета и выдаёт список расхождений — сколько сопоставлено, у кого изменилось подразделение, кого в каталоге больше нет. Администратор читает этот список и затем применяет его.

Границы тоже стоит знать заранее. В Wepilot сверка не создаёт ни учётных записей, ни подразделений; она обновляет существующие профили. Причина — осторожность: сотни учётных записей, созданных из-за неверного фильтра, откатить куда труднее, чем поля профилей, записанные той же ошибкой. Полностью автоматический жизненный цикл учётных записей — приём, перевод и увольнение через SCIM — отдельная тема и в объём этой интеграции не входит.

Где хранятся секреты?

То, что несёт эта интеграция, — не обычная настройка, а доступ к вашему каталогу. Клиентский секрет и пароль LDAP не должны попадать в браузер никогда.

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

С чего начать?

Наш порядок однозначен: сначала настройте сверку с каталогом, затем переходите к SSO. Причина практическая — корректный справочник даёт видимую всем пользу с первого дня, тогда как SSO требует согласования с командой по управлению доступом и окна для тестирования.

Измерять тоже несложно: число несопоставленных записей, число людей, которые есть в каталоге, но отсутствуют в интранете, и время с последней успешной синхронизации. Если эти три показателя не стремятся к нулю, интеграция установлена, но не эксплуатируется. Такую ответственность за процесс мы разбираем в статье об эксплуатации.