LDAP и SSO в корпоративном мессенджере: настройка единого входа
Средний сотрудник в компании из 100 человек использует 12–15 рабочих сервисов. У каждого — свой логин и пароль. По данным LastPass (Business Report 2025), средний пользователь управляет 47 паролями. Из них повторно используются 64%. Один взломанный пароль открывает доступ к нескольким системам.
SSO (Single Sign-On) решает эту проблему: сотрудник входит один раз — через корпоративный каталог (Active Directory, LDAP, Keycloak) — и получает доступ ко всем рабочим сервисам, включая мессенджер. Один пароль (или вообще без пароля — через Passkey), одна точка управления, одно место для отзыва доступа.
Для корпоративного мессенджера SSO — не опция, а требование. Вот почему, и как это настроить.
Зачем мессенджеру SSO: проблема 47 паролей
Безопасность
Без SSO каждый сотрудник создаёт пароль для мессенджера самостоятельно. Что он выбирает? Тот же пароль, что для email. Или «Company2026!». Или — если IT-политика требует сложный пароль — «Qwerty123!@#», записанный на стикере.
С SSO: пароль один. Он управляется корпоративной политикой: минимальная длина, сложность, ротация, запрет повторного использования. Если скомпрометирован — меняется в одном месте, и доступ ко всем сервисам (включая мессенджер) обновляется мгновенно.
Статистика: по данным Verizon DBIR 2025, 81% утечек данных связаны со слабыми или скомпрометированными паролями. SSO с 2FA снижает этот риск на 90%+.
Управление жизненным циклом
Сотрудник уволился. Без SSO: администратор должен вручную деактивировать аккаунт в каждом сервисе. Забыл мессенджер? Бывший сотрудник читает рабочие чаты ещё три месяца.
С SSO: администратор деактивирует учётную запись в Active Directory — и сотрудник автоматически теряет доступ ко всем подключённым сервисам. В ту же секунду. Без ручного перебора 15 систем.
По данным Sailpoint, среднее время деактивации всех аккаунтов уволенного сотрудника без SSO — 7 дней. С SSO — менее 1 часа.
Удобство
Сотрудник открывает мессенджер — и сразу в системе. Без формы логина, без ввода пароля, без «забыл пароль». Браузер перенаправляет на корпоративную страницу входа (если сессия не активна) или пропускает вообще (если сессия активна).
Результат: экономия 5–10 минут в день на авторизациях. Для 100 сотрудников — 500–1 000 минут в день. Это 8–16 рабочих часов ежедневно. Не считая обращений в IT-поддержку «забыл пароль от мессенджера» — которые с SSO исчезают полностью.
LDAP и Active Directory: базовые концепции
Что такое LDAP
LDAP (Lightweight Directory Access Protocol) — протокол для доступа к каталогу пользователей. Каталог — это иерархическая база данных, которая хранит информацию об объектах организации: пользователях, группах, компьютерах, политиках.
Структура LDAP — дерево (Directory Information Tree). Корень — домен компании. Ветви — подразделения (Organizational Units, OU). Листья — объекты (пользователи, группы).
Пример структуры для компании b8q.ru:
dc=b8q,dc=ru
├── ou=People
│ ├── uid=ivanov (Иванов Пётр, отдел разработки)
│ ├── uid=petrova (Петрова Анна, отдел продаж)
│ └── uid=sidorov (Сидоров Максим, IT-отдел)
├── ou=Groups
│ ├── cn=developers (участники: ivanov)
│ ├── cn=sales (участники: petrova)
│ └── cn=admins (участники: sidorov)
└── ou=Services
└── cn=messenger (сервисный аккаунт для мессенджера)
Каждый объект имеет атрибуты: uid (логин), cn (полное имя), mail (email), memberOf (группы), telephoneNumber и другие.
Active Directory vs OpenLDAP vs FreeIPA
Active Directory (AD) — реализация каталога от Microsoft. Самая распространённая в корпоративном мире. По данным IDC, 90% компаний из Fortune 500 используют AD. Включает LDAP, Kerberos, групповые политики, DNS. Работает на Windows Server.
OpenLDAP — open-source реализация LDAP. Легковесная, работает на Linux. Для компаний, которые не используют Windows-инфраструктуру. Настройка сложнее, чем AD, но полностью бесплатна.
FreeIPA — open-source альтернатива AD для Linux-окружений. Включает LDAP (389 Directory Server), Kerberos, DNS, CA. Удобнее OpenLDAP в настройке, с веб-интерфейсом. Популярна в Linux-ориентированных компаниях.
Keycloak — open-source Identity Provider (IdP). Не каталог, а именно SSO-решение: поддерживает SAML, OIDC, может подключаться к AD/LDAP как к backend. Часто используется как прослойка между корпоративным каталогом и приложениями.
Как мессенджер использует LDAP
Два режима:
- Аутентификация (LDAP Bind). Пользователь вводит логин и пароль в мессенджере. Мессенджер передаёт их LDAP-серверу (bind-запрос). Если LDAP подтверждает — пользователь авторизован. Пароль не хранится в мессенджере.
- Синхронизация (LDAP Search). Мессенджер периодически (раз в 5–60 минут) запрашивает у LDAP список пользователей и групп. Новые пользователи — автоматически создаются в мессенджере. Удалённые — деактивируются. Изменённые (новая фамилия, новый отдел) — обновляются.
Протоколы SSO: SAML 2.0, OIDC, Kerberos
SAML 2.0
Security Assertion Markup Language — стандарт SSO для enterprise-приложений. Разработан OASIS в 2005 году. Используется повсеместно: Salesforce, AWS, Google Workspace, Jira — все поддерживают SAML.
Как работает:
- Пользователь открывает мессенджер (Service Provider, SP)
- Мессенджер перенаправляет на Identity Provider (IdP) — AD FS, Keycloak, Okta
- Пользователь вводит корпоративные учётные данные (или уже авторизован)
- IdP создаёт SAML Assertion — XML-документ с информацией о пользователе, подписанный цифровой подписью
- Браузер передаёт Assertion мессенджеру
- Мессенджер проверяет подпись, извлекает данные, создаёт сессию
Преимущества: зрелый стандарт, поддерживается везде, хорошая совместимость с enterprise IdP (AD FS, Shibboleth). Недостатки: XML-based (тяжеловесный), сложная настройка, не подходит для мобильных приложений (редиректы через браузер).
OpenID Connect (OIDC)
Надстройка над OAuth 2.0, разработанная в 2014 году. Современная альтернатива SAML. Используется Google, Microsoft, Apple, GitHub.
Как работает:
- Пользователь нажимает «Войти через SSO» в мессенджере
- Мессенджер перенаправляет на IdP (Keycloak, Azure AD, Google) с указанием scope (openid, profile, email)
- Пользователь авторизуется
- IdP возвращает Authorization Code
- Мессенджер обменивает код на ID Token (JWT) и Access Token
- ID Token содержит информацию о пользователе: sub, email, name, groups
Преимущества: JSON-based (легковесный), отлично работает с мобильными и веб-приложениями, проще в реализации, чем SAML. Поддерживает PKCE (защита от перехвата кода). Недостатки: менее зрелый, чем SAML, некоторые legacy-системы не поддерживают.
Kerberos
Протокол аутентификации, встроенный в Active Directory. Работает на основе билетов (tickets): пользователь получает TGT (Ticket Granting Ticket) при входе в Windows, затем использует его для доступа к сервисам без повторного ввода пароля.
Для мессенджера Kerberos актуален в одном сценарии: Windows-десктоп + Internet Explorer/Edge + мессенджер в интранете. Пользователь входит в Windows — и мессенджер автоматически подхватывает Kerberos-билет. Никаких форм логина. Это называется «прозрачная аутентификация» (Seamless SSO).
На практике: работает только в Windows-доменах, только для веб-клиента (не PWA с кастомного домена), и только если всё правильно настроено (SPN, делегирование). Для смешанных окружений (Windows + macOS + Linux) — Kerberos не подходит как основной метод, но может работать как дополнительный.
Что выбрать
| Критерий | SAML 2.0 | OIDC | Kerberos |
|---|---|---|---|
| Сложность настройки | Высокая | Средняя | Высокая |
| Мобильные приложения | Плохо | Отлично | Нет |
| PWA | Хорошо | Отлично | Ограниченно |
| Enterprise совместимость | Максимальная | Высокая | Windows only |
| Прозрачный вход (без формы) | Нет | Нет (кроме refresh token) | Да (Windows) |
| Рекомендация | Legacy enterprise | Новые проекты | Windows-домены |
Для новых интеграций: OIDC. Проще, легче, лучше работает с PWA и мобильными клиентами. SAML — если IdP не поддерживает OIDC (такое бывает с legacy AD FS). Kerberos — как дополнение для Windows-пользователей.
Архитектура: как мессенджер интегрируется с IdP
Вариант 1: Прямая интеграция с LDAP
Мессенджер подключается к LDAP-серверу напрямую. Аутентификация — через LDAP Bind. Синхронизация — через LDAP Search.
Плюсы: простота, минимум компонентов. Минусы: мессенджер получает доступ к LDAP (дополнительная точка атаки), нет SSO с другими приложениями (только аутентификация через LDAP, но не Single Sign-On).
Когда использовать: для self-hosted мессенджера в доверенной корпоративной сети, если нет IdP (Keycloak, AD FS).
Вариант 2: Через IdP (рекомендуемый)
IdP (Keycloak, AD FS, Okta) подключён к LDAP/AD. Мессенджер подключён к IdP через SAML/OIDC. Пользователь авторизуется через IdP — мессенджер получает токен.
Плюсы: настоящий SSO (один вход — доступ ко всем приложениям), мессенджер не имеет прямого доступа к LDAP, централизованное управление политиками (2FA, блокировка, сессии). Минусы: дополнительный компонент (IdP) для настройки и поддержки.
Когда использовать: всегда, если позволяет инфраструктура. Это стандартная архитектура для enterprise.
Вариант 3: Гибрид
OIDC/SAML для SSO + LDAP для синхронизации пользователей. Мессенджер аутентифицирует через IdP (SSO), но дополнительно синхронизирует профили и группы напрямую из LDAP. Так получают и SSO, и автоматический маппинг групп.
Настройка LDAP-интеграции: пошагово
Пример для b8q Self-Hosted + Active Directory.
Предварительные требования
- Active Directory (Windows Server 2016+) или OpenLDAP / FreeIPA
- Сетевой доступ от сервера b8q к LDAP-серверу (порт 389 для LDAP, 636 для LDAPS)
- Сервисный аккаунт в AD с правами на чтение (не администратор домена!)
- SSL-сертификат для LDAPS (обязательно для production)
Шаг 1: Создание сервисного аккаунта
В Active Directory создайте пользователя для мессенджера:
- Имя: svc-b8q-ldap
- Пароль: сложный, 24+ символов (этот пароль не вводится вручную — только в конфигурации)
- Права: Domain Users + Read access к OU с пользователями
- Политика: пароль не истекает (или — если политика требует — запланируйте ротацию)
Не давайте сервисному аккаунту права администратора. Принцип минимальных привилегий: аккаунт для чтения не должен уметь менять пароли, создавать пользователей или управлять группами.
Шаг 2: Конфигурация подключения
Параметры подключения к LDAP в конфигурации мессенджера:
# LDAP server
LDAP_URL=ldaps://ad.company.local:636
LDAP_BIND_DN=CN=svc-b8q-ldap,OU=Services,DC=company,DC=local
LDAP_BIND_PASSWORD=<encrypted_password>
# Search base
LDAP_USER_BASE=OU=People,DC=company,DC=local
LDAP_GROUP_BASE=OU=Groups,DC=company,DC=local
# Filters
LDAP_USER_FILTER=(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
LDAP_GROUP_FILTER=(objectClass=group)
# Attribute mapping
LDAP_ATTR_UID=sAMAccountName
LDAP_ATTR_EMAIL=mail
LDAP_ATTR_FIRSTNAME=givenName
LDAP_ATTR_LASTNAME=sn
LDAP_ATTR_AVATAR=thumbnailPhoto
# Sync interval (minutes)
LDAP_SYNC_INTERVAL=15
Ключевые моменты:
- LDAPS (порт 636), не LDAP (порт 389). Незашифрованный LDAP передаёт пароли в открытом виде. LDAPS шифрует соединение через TLS. Обязательно для production.
- User filter с исключением заблокированных. Флаг userAccountControl:1.2.840.113556.1.4.803:=2 в AD означает «аккаунт отключён». Фильтр исключает отключённых пользователей.
- Пароль сервисного аккаунта — зашифрован. Не храните в открытом виде. Используйте vault (HashiCorp Vault, SOPS) или переменные окружения.
Шаг 3: Маппинг атрибутов
Маппинг определяет, какой атрибут LDAP соответствует какому полю в мессенджере:
| Поле мессенджера | Атрибут AD | Атрибут OpenLDAP | Описание |
|---|---|---|---|
| Username | sAMAccountName | uid | Логин |
| Email-адрес | |||
| Имя | givenName | givenName | Имя |
| Фамилия | sn | sn | Фамилия |
| Отдел | department | ou | Отдел |
| Должность | title | title | Должность |
| Телефон | telephoneNumber | telephoneNumber | Рабочий телефон |
| Аватар | thumbnailPhoto | jpegPhoto | Фотография |
Шаг 4: Тестирование
Перед включением для всех пользователей проверьте:
- Подключение к LDAP-серверу (ldapsearch с сервера мессенджера)
- Аутентификация тестового пользователя
- Синхронизация: количество найденных пользователей совпадает с ожидаемым
- Маппинг: имя, фамилия, email заполнились корректно
- Аватар: если используется thumbnailPhoto — загружается
- Деактивация: отключите тестового пользователя в AD → в мессенджере он деактивируется при следующей синхронизации
Настройка SAML 2.0 SSO: пошагово
Пример: b8q + Keycloak (но принцип одинаковый для AD FS, Okta, OneLogin).
Шаг 1: Создание клиента в Keycloak
- Откройте Keycloak Admin Console
- Выберите realm (или создайте новый)
- Clients → Create Client
- Client type: SAML
- Client ID: b8q-messenger (это Entity ID — уникальный идентификатор мессенджера)
- Valid Redirect URIs: https://messenger.company.local/auth/saml/callback
- Включите: Sign Assertions, Force POST Binding
Шаг 2: Настройка маппинга атрибутов в Keycloak
Добавьте маппинг Protocol Mappers для передачи атрибутов пользователя в SAML Assertion:
- email → urn:oid:0.9.2342.19200300.100.1.3
- firstName → urn:oid:2.5.4.42
- lastName → urn:oid:2.5.4.4
- groups → memberOf (для маппинга групп на каналы)
Шаг 3: Получение метаданных
Скачайте IdP Metadata XML из Keycloak: Realm Settings → General → SAML 2.0 Identity Provider Metadata. Этот XML содержит: URL для входа (SSO Endpoint), URL для выхода (SLO Endpoint), публичный сертификат для проверки подписей.
Шаг 4: Конфигурация мессенджера
# SAML SSO Configuration
SAML_ENABLED=true
SAML_IDP_METADATA_URL=https://keycloak.company.local/realms/company/protocol/saml/descriptor
SAML_SP_ENTITY_ID=b8q-messenger
SAML_CALLBACK_URL=https://messenger.company.local/auth/saml/callback
SAML_SIGN_REQUESTS=true
SAML_WANT_ASSERTIONS_SIGNED=true
SAML_CERTIFICATE=/etc/b8q/saml/sp.crt
SAML_PRIVATE_KEY=/etc/b8q/saml/sp.key
Шаг 5: Тестирование
- Откройте мессенджер в приватном окне браузера
- Нажмите «Войти через SSO»
- Должен произойти редирект на Keycloak
- Введите учётные данные
- Должен произойти редирект обратно в мессенджер — уже авторизованным
- Проверьте: имя, email, аватар заполнены корректно
Настройка OpenID Connect: пошагово
OIDC — более простой и современный вариант. Пример: b8q + Keycloak.
Шаг 1: Создание клиента в Keycloak
- Clients → Create Client
- Client type: OpenID Connect
- Client ID: b8q-messenger
- Client authentication: On (confidential client)
- Valid Redirect URIs: https://messenger.company.local/auth/oidc/callback
- Web Origins: https://messenger.company.local
Сохраните Client Secret — он понадобится для конфигурации мессенджера.
Шаг 2: Конфигурация мессенджера
# OIDC SSO Configuration
OIDC_ENABLED=true
OIDC_ISSUER=https://keycloak.company.local/realms/company
OIDC_CLIENT_ID=b8q-messenger
OIDC_CLIENT_SECRET=<encrypted_secret>
OIDC_CALLBACK_URL=https://messenger.company.local/auth/oidc/callback
OIDC_SCOPES=openid profile email groups
OIDC_PKCE=true
Обратите внимание на PKCE (Proof Key for Code Exchange) — защита от перехвата authorization code. Обязательно для PWA и мобильных клиентов.
Шаг 3: Тестирование
Аналогично SAML: приватное окно → Войти через SSO → редирект на Keycloak → авторизация → редирект обратно. Проверьте поля профиля и принадлежность к группам.
SCIM: автоматическое управление пользователями
SCIM (System for Cross-domain Identity Management) — протокол для автоматического провижинга и деактивации пользователей. Если LDAP-синхронизация — это «мессенджер спрашивает LDAP каждые 15 минут», то SCIM — это «IdP сообщает мессенджеру в реальном времени».
Что даёт SCIM
- Мгновенный провижинг: создали пользователя в AD → через секунды он появляется в мессенджере
- Мгновенная деактивация: заблокировали пользователя в AD → через секунды его сессия в мессенджере закрыта
- Синхронизация групп: добавили пользователя в группу «Разработка» в AD → он автоматически попадает в канал #разработка в мессенджере
- Обновление профилей: изменили фамилию (свадьба) в AD → фамилия обновляется в мессенджере
SCIM работает через REST API: IdP отправляет HTTP-запросы (POST для создания, PUT для обновления, DELETE для удаления) на SCIM-эндпоинт мессенджера.
Поддержка SCIM в мессенджерах
- b8q: поддерживается (тариф Бизнес и Корпорация)
- Slack: поддерживается (Business+ и Enterprise Grid)
- Microsoft Teams: через Azure AD Provisioning
- Mattermost: через плагин
- Dialog: по запросу
Keycloak: почему и как использовать
Keycloak — open-source Identity Provider от Red Hat. В контексте корпоративного мессенджера Keycloak решает задачу, которую AD FS решает для Microsoft-мира: централизованная аутентификация для всех приложений.
Почему Keycloak
- Open-source и бесплатный. Нет лицензионных платежей. Можно развернуть на своём сервере.
- Поддерживает всё: SAML 2.0, OIDC, LDAP/AD-бэкенд, MFA (TOTP, WebAuthn), social login, user federation.
- Веб-интерфейс: администрирование через браузер, без командной строки.
- Темы и кастомизация: можно оформить страницу входа в корпоративном стиле.
- Кластеризация: поддерживает HA (High Availability) из коробки.
Типичная архитектура
Keycloak подключается к Active Directory (или OpenLDAP/FreeIPA) как User Federation Provider. Пользователи и группы синхронизируются из AD в Keycloak. Приложения (мессенджер, CRM, ERP, GitLab) подключаются к Keycloak через OIDC или SAML.
Результат: сотрудник входит один раз через Keycloak — и имеет доступ ко всем приложениям. Пароль хранится в AD (единственный источник правды). MFA настраивается в Keycloak (один раз, для всех приложений).
Требования для установки
- Java 17+ (Keycloak 22+ работает на Quarkus)
- PostgreSQL (рекомендуемая БД) или MySQL/MariaDB
- 2 vCPU, 2 GB RAM — для малых установок (до 500 пользователей)
- 4 vCPU, 4 GB RAM — для средних (500–5 000 пользователей)
- Docker / Kubernetes — рекомендуемый способ развёртывания
Keycloak можно развернуть на том же сервере, что и мессенджер (для малых установок), или на отдельном — для изоляции и масштабирования.
Альтернативы Keycloak
- AD FS (Active Directory Federation Services): если у вас Windows Server + AD — AD FS уже встроен. Поддерживает SAML 2.0 и OIDC. Минус: только Windows, менее гибкий, чем Keycloak.
- Authentik: open-source IdP, написанный на Python (Django). Более современный интерфейс, чем Keycloak. Поддерживает SAML, OIDC, LDAP proxy. Менее зрелый, но активно развивается.
- Okta / Auth0: облачные IdP. Платные (от $2 за пользователя в месяц). Не требуют администрирования. Для компаний без собственной инфраструктуры IdP.
- Zitadel: open-source, cloud-native IdP с focus на OIDC. Проще Keycloak в настройке, но менее функционален.
Маппинг групп: LDAP-группы → каналы мессенджера
Одна из самых полезных возможностей LDAP-интеграции: автоматическое добавление пользователей в каналы мессенджера на основе их групп в Active Directory.
Пример маппинга
| Группа AD | Канал мессенджера | Роль |
|---|---|---|
| CN=All Staff | #объявления | Member (read-only) |
| CN=Developers | #разработка | Member |
| CN=Sales | #продажи | Member |
| CN=Managers | #руководство | Member |
| CN=IT Admins | Все каналы | Admin |
| CN=Project Alpha | #проект-альфа | Member |
Когда нового сотрудника добавляют в группу «Developers» в AD — он автоматически появляется в канале #разработка в мессенджере. Когда убирают из группы — автоматически удаляется из канала.
Это экономит: время администратора (не нужно вручную добавлять в каналы), исключает ошибки (забыли добавить / забыли удалить), обеспечивает соответствие политикам (доступ определяется ролью в AD, а не ручными действиями).
Практические советы по Active Directory
Active Directory — стандарт de facto в корпоративном мире. Вот специфические рекомендации для интеграции мессенджера с AD.
Организационные единицы (OU) для мессенджера
Не синхронизируйте всё дерево AD. Ограничьте LDAP_USER_BASE конкретными OU:
- Включите: OU=Employees (активные сотрудники), OU=Contractors (подрядчики, если нужен доступ)
- Исключите: OU=Service Accounts, OU=Disabled, OU=Computers, OU=Groups (группы синхронизируются отдельно)
Если структура AD сложная (несколько OU в разных поддеревьях) — используйте несколько LDAP_USER_BASE или фильтр по атрибуту (например, memberOf=CN=MessengerUsers,OU=Groups,DC=company,DC=local).
Вложенные группы
AD поддерживает вложенные группы: группа «All Engineers» включает группы «Backend», «Frontend», «QA». Не все мессенджеры корректно обрабатывают вложенность. Проверьте: если пользователь в группе «Backend», а маппинг настроен на «All Engineers» — попадёт ли он в канал?
Если мессенджер не поддерживает вложенные группы — используйте LDAP-фильтр с рекурсией: (memberOf:1.2.840.113556.1.4.1941:=CN=All Engineers,...). Этот OID — специальный оператор AD для рекурсивного поиска по вложенным группам.
Множественные домены
Крупные компании часто имеют несколько AD-доменов (холдинговая структура: company.local, subsidiary.local, partner.local). Для интеграции:
- Keycloak User Federation: настройте несколько LDAP-провайдеров — по одному на каждый домен. Пользователи из всех доменов будут доступны через единый SSO.
- AD Trust: если между доменами настроен trust — мессенджер может подключаться к Global Catalog (порт 3268/3269), который объединяет данные из всех доменов.
Безопасность: 8 правил интеграции
- Только LDAPS. Никогда не используйте LDAP без TLS в production. Пароли и данные пользователей передаются в открытом виде. Порт 636 (LDAPS) или StartTLS на порту 389.
- Минимальные привилегии сервисного аккаунта. Read-only доступ к нужным OU. Не Domain Admin. Не Account Operators. Только чтение.
- Ротация сервисных паролей. Пароль сервисного аккаунта — каждые 90 дней. Автоматизируйте через secret management (Vault, AWS Secrets Manager).
- 2FA через IdP. Включите двухфакторную аутентификацию на уровне IdP (Keycloak, AD FS). Мессенджер получает уже аутентифицированного пользователя — 2FA обработана IdP.
- Ограничение по IP. Если мессенджер self-hosted в корпоративной сети — ограничьте доступ к LDAP с IP-адреса сервера мессенджера. Firewall: allow tcp 636 from messenger-ip to ldap-ip.
- Аудит-логи LDAP-запросов. Включите аудит на LDAP-сервере: кто, когда, что запрашивал. Если сервисный аккаунт вдруг начнёт делать необычные запросы — это сигнал компрометации.
- Таймаут сессий. SSO-сессия не должна быть бесконечной. Рекомендация: 8–12 часов для активной сессии, 7 дней для refresh token (с возможностью отзыва).
- Проверка сертификатов. Мессенджер должен проверять SSL-сертификат LDAP-сервера. Не отключайте проверку — это открывает дверь для MITM-атак.
Passwordless: вход без паролей
Пароли — самое слабое звено аутентификации. Passwordless — подход, при котором пароль не используется вообще. Вместо него:
- Passkeys (WebAuthn/FIDO2): криптографический ключ, хранящийся на устройстве пользователя (или в облаке — iCloud Keychain, Google Password Manager). При входе устройство подтверждает личность через биометрию (Face ID, отпечаток пальца) или PIN. Пароль не передаётся и не хранится на сервере.
- Magic link: одноразовая ссылка, отправленная на email. Пользователь кликает — и авторизован. Удобно, но зависит от безопасности email-аккаунта.
- Hardware key: физический ключ (YubiKey, Google Titan). Вставляется в USB или подносится к NFC — и пользователь авторизован.
Passwordless через Keycloak
Keycloak 22+ поддерживает passwordless-вход через WebAuthn. Настройка:
- Authentication → Flows → создать новый flow на основе WebAuthn
- Включить WebAuthn Passwordless Authenticator
- Привязать flow к клиенту мессенджера
- Пользователи регистрируют Passkey при первом входе (один раз)
- Последующие входы — биометрия или PIN, без пароля
Для корпоративного мессенджера passwordless — идеальный сценарий: сотрудник открывает PWA, подтверждает Face ID — и в мессенджере. Без формы логина, без пароля, без 2FA-кода (биометрия уже является вторым фактором).
Совместимость
| Платформа | Passkeys | Hardware key (YubiKey) |
|---|---|---|
| iOS 16+ | iCloud Keychain | NFC / Lightning |
| Android 14+ | Google Password Manager | NFC / USB-C |
| macOS 13+ | iCloud Keychain / Chrome | USB-A / USB-C |
| Windows 10+ | Windows Hello | USB-A / USB-C / NFC |
| Linux | Chrome (через Google PM) | USB-A / USB-C |
Passkeys синхронизируются между устройствами: создали на iPhone — работают на Mac, iPad. Но не синхронизируются между экосистемами (iCloud → Google — нет). Для корпоративной среды с разными устройствами: разрешите регистрацию нескольких Passkeys на одном аккаунте.
Диагностика проблем
«Пользователь не может войти»
Чек-лист:
- Аккаунт не заблокирован в AD? Проверьте userAccountControl.
- Пользователь находится в правильной OU? Если LDAP_USER_BASE = OU=People, а пользователь в OU=External — его не видно.
- LDAP-фильтр не исключает пользователя? Проверьте objectClass, memberOf.
- Пароль правильный? Попробуйте LDAP bind вручную (ldapsearch -W).
- LDAPS-сертификат валиден? Проверьте expiry, CN, CA chain.
«Синхронизация не работает»
- Сетевой доступ: telnet ldap-server 636 с сервера мессенджера
- Сервисный аккаунт: не заблокирован? Пароль не истёк?
- Тайм-ауты: LDAP-запрос к большому каталогу (10 000+ пользователей) может таймаутиться. Увеличьте timeout или используйте paged search.
- Логи мессенджера: ищите ошибки LDAP в логах — обычно сообщение об ошибке указывает на проблему.
«SSO-редирект зацикливается»
- Проверьте Callback URL: совпадает в конфигурации мессенджера и в IdP?
- Часы синхронизированы? Разница во времени между IdP и мессенджером > 5 минут вызывает ошибку проверки токена.
- Cookie SameSite: если IdP и мессенджер на разных доменах, проверьте настройки SameSite для cookie.
- Сертификаты: проверьте, что мессенджер доверяет сертификату IdP (и наоборот, для SAML).
JIT Provisioning: создание аккаунтов при первом входе
JIT (Just-In-Time) Provisioning — альтернатива LDAP-синхронизации и SCIM. Аккаунт в мессенджере создаётся автоматически при первом входе через SSO. Не нужно заранее синхронизировать — пользователь авторизовался через IdP → мессенджер получил SAML Assertion или ID Token с атрибутами → создал аккаунт на лету.
Как работает
- Новый сотрудник получает учётную запись в AD/Keycloak
- Открывает мессенджер, нажимает «Войти через SSO»
- IdP аутентифицирует пользователя, передаёт атрибуты (email, имя, фамилия, группы)
- Мессенджер: «Такого пользователя нет → создаю». Заполняет профиль из атрибутов SSO.
- Маппинг групп: если атрибуты содержат группы — добавляет в соответствующие каналы.
JIT vs SCIM vs LDAP Sync
| Критерий | JIT | LDAP Sync | SCIM |
|---|---|---|---|
| Создание аккаунта | При первом входе | По расписанию | В реальном времени |
| Деактивация | Нет (только руками) | При следующей синхронизации | В реальном времени |
| Обновление профиля | При каждом входе | По расписанию | В реальном времени |
| Маппинг групп | При каждом входе | По расписанию | В реальном времени |
| Сложность настройки | Минимальная | Средняя | Высокая |
| Подходит для | Малые команды | Средние + крупные | Крупные |
Главный минус JIT: нет автоматической деактивации. Если сотрудник уволен и не пытается войти — его аккаунт в мессенджере остаётся активным (хотя войти он не сможет — SSO откажет). Для аудита это может быть проблемой: «активный аккаунт уволенного сотрудника» в отчёте выглядит плохо.
Рекомендация: JIT — для малых компаний (до 50 человек) без строгих compliance-требований. LDAP Sync — для средних (50–500). SCIM — для крупных (500+) с требованиями мгновенной деактивации.
Сравнение мессенджеров по поддержке SSO
| Мессенджер | LDAP | SAML 2.0 | OIDC | SCIM | Group Mapping | Тариф |
|---|---|---|---|---|---|---|
| b8q | Да | Да | Да | Да | Да | Бизнес |
| Mattermost | Да | Да (E20) | Да (E20) | Плагин | Да | Enterprise |
| Dialog | Да | Да | Нет | Нет | Да | Enterprise |
| VK Teams | Да | Да | Да | Нет | Частично | Business |
| Pachca | Нет | Нет | Нет | Нет | Нет | — |
| Compass | Нет | Нет | Нет | Нет | Нет | — |
Как видно из таблицы, полноценная поддержка SSO — это признак enterprise-мессенджера. Простые решения (Pachca, Compass) не поддерживают SSO, что ограничивает их применимость в компаниях с корпоративной инфраструктурой.
LDAP и SSO — это не «дополнительная фишка». Для компании с 50+ сотрудниками и корпоративным каталогом это обязательное требование. Один пароль, один источник правды, мгновенная деактивация — всё это снижает риски и экономит десятки часов IT-отдела ежемесячно.
b8q поддерживает все три протокола (LDAP, SAML 2.0, OIDC), SCIM-провижинг и маппинг групп на каналы. Настройка занимает 1–2 часа для типовой конфигурации с AD или Keycloak. Для нетиповых сценариев — свяжитесь с нами, поможем с интеграцией.
Многофакторная аутентификация через SSO
SSO без MFA (Multi-Factor Authentication) — как замок без ключа. Один скомпрометированный пароль открывает доступ ко всем системам. Поэтому SSO и MFA — неразрывная пара.
Варианты второго фактора
- TOTP (Time-based One-Time Password). Приложения: Google Authenticator, Яндекс.Ключ, Authy, Microsoft Authenticator. Генерируют 6-значный код каждые 30 секунд. Просто, надёжно, работает офлайн. Рекомендуемый минимум для всех организаций.
- WebAuthn / FIDO2. Физические ключи (YubiKey, Google Titan) или биометрия устройства (Face ID, Touch ID, Windows Hello). Самый безопасный вариант: невозможно фишить (ключ привязан к домену), невозможно перехватить (криптография на аппаратном уровне). Рекомендуется для администраторов и руководства.
- Passkeys. Эволюция WebAuthn: ключи синхронизируются между устройствами через iCloud Keychain, Google Password Manager. Удобство пароля + безопасность криптографического ключа. Поддерживается Keycloak 23+, Azure AD, Google Workspace.
- SMS. Худший вариант второго фактора (SIM-свопинг, SS7-перехват), но лучше, чем ничего. Используйте только если другие варианты невозможны.
- Push-уведомления. Microsoft Authenticator, Duo. Пользователь получает уведомление «Подтвердить вход?» и нажимает «Да». Удобно, но уязвимо к MFA fatigue (пользователь автоматически нажимает «Да» на любой запрос).
Рекомендуемая конфигурация
- Обычные пользователи: TOTP (Google Authenticator / Яндекс.Ключ) или Passkeys
- Администраторы: WebAuthn (физический YubiKey) — обязательно
- Сервисные аккаунты: API-ключи с IP-ограничением (MFA неприменим)
Настройка MFA делается на уровне IdP (Keycloak, AD FS), не на уровне мессенджера. Мессенджер получает уже аутентифицированного пользователя — проверку второго фактора выполнил IdP.
Управление жизненным циклом: от найма до увольнения
LDAP/SSO-интеграция позволяет автоматизировать весь жизненный цикл сотрудника в мессенджере:
Найм (Provisioning)
- HR создаёт учётную запись в Active Directory (или HR-система создаёт автоматически)
- AD назначает группы: отдел, проект, роль
- SCIM или LDAP-синхронизация создаёт аккаунт в мессенджере
- Маппинг групп добавляет сотрудника в нужные каналы
- Сотрудник получает email с инструкцией: «Ваш корпоративный мессенджер: [URL]. Войдите через SSO.»
- Первый вход — через корпоративный логин. Без отдельной регистрации.
Время от создания в AD до доступа в мессенджер: с SCIM — менее 1 минуты. С LDAP-синхронизацией (интервал 15 минут) — до 15 минут.
Изменение роли (Modification)
Сотрудник перешёл из отдела продаж в отдел маркетинга:
- В AD: удалён из группы Sales, добавлен в группу Marketing
- В мессенджере (автоматически): удалён из канала #продажи, добавлен в канал #маркетинг
- Атрибут department обновлён — в профиле мессенджера отображается новый отдел
Без LDAP-интеграции: администратор мессенджера должен вручную переместить сотрудника. С интеграцией — автоматически.
Увольнение (Deprovisioning)
- HR деактивирует учётную запись в AD
- SCIM отправляет DELETE/PATCH запрос — или LDAP-синхронизация обнаруживает деактивацию
- Мессенджер: аккаунт деактивирован, все активные сессии закрыты
- Бывший сотрудник не может войти, прочитать историю или скачать файлы
- Данные (сообщения, файлы) остаются в системе — доступны администратору для аудита
Критично: деактивация должна быть мгновенной. Для SCIM — это секунды. Для LDAP-синхронизации с интервалом 15 минут — до 15 минут. Для критичных ситуаций (увольнение с конфликтом, компрометация аккаунта) настройте ручную деактивацию в мессенджере как дополнение к LDAP.
Кейс: настройка SSO для компании 300 человек
Профиль: производственная компания, 300 сотрудников, 5 офисов + 40 удалёнщиков. Инфраструктура: Windows Server 2019 + Active Directory, Keycloak как IdP (настроен ранее для CRM и ERP).
Задача
Развернуть b8q Self-Hosted с SSO через Keycloak + LDAP-синхронизацией для маппинга групп на каналы.
Реализация
День 1: Установка b8q на выделенный сервер (8 vCPU, 16 GB RAM, 500 GB SSD). Docker Compose, 30 минут. Настройка SSL через Let's Encrypt + Nginx reverse proxy.
День 1 (продолжение): Создание OIDC-клиента в Keycloak. Настройка OIDC в b8q. Тест — вход через SSO работает. 1.5 часа.
День 2: Настройка LDAP-синхронизации: подключение к AD, маппинг атрибутов, фильтрация (исключили сервисные аккаунты и деактивированных пользователей). Первая синхронизация: 287 пользователей из 300 (13 — сервисные аккаунты). 2 часа.
День 2 (продолжение): Маппинг групп: 12 групп AD → 12 каналов мессенджера. Тестирование: добавили тестового пользователя в группу — он автоматически появился в канале. Удалили — исчез. 1 час.
День 3: Настройка MFA в Keycloak: обязательный TOTP для всех пользователей. Тестирование входа с 2FA. Настройка политики сессий: 8 часов активная сессия, 7 дней refresh token. 2 часа.
Итого: 2 рабочих дня от начала до полностью рабочей SSO-интеграции. Один инженер. Без внешних консультантов.
Результат через 3 месяца
- 0 обращений «забыл пароль от мессенджера» (SSO — пароль один)
- Среднее время деактивации уволенного: 4 минуты (деактивация в AD → автоматическая деактивация в мессенджере)
- 6 новых сотрудников онбордились за 3 месяца — каждый получил доступ к мессенджеру автоматически при создании AD-аккаунта
- IT-отдел экономит ~8 часов в месяц на ручном управлении аккаунтами
Частые вопросы
Можно ли использовать SSO без LDAP?
Да. SSO (SAML/OIDC) и LDAP — независимые механизмы. Можно использовать только SSO (аутентификация через IdP) без LDAP-синхронизации (пользователи создаются вручную или при первом входе через SSO — JIT provisioning). Но маппинг групп без LDAP или SCIM придётся настраивать вручную.
Что если LDAP-сервер недоступен?
Если мессенджер использует LDAP только для синхронизации (а аутентификация — через SSO/OIDC), то недоступность LDAP не влияет на вход пользователей. Просто не будут обновляться профили и группы до восстановления. Если LDAP используется для аутентификации (LDAP Bind) — пользователи не смогут войти. Рекомендация: используйте SSO для аутентификации, LDAP — только для синхронизации.
Поддерживает ли b8q несколько IdP одновременно?
Да. Можно настроить несколько OIDC/SAML провайдеров: например, корпоративный Keycloak для сотрудников и Google Workspace для внешних подрядчиков. Пользователь выбирает провайдер на экране входа.
Как мигрировать с локальных аккаунтов на SSO?
Если мессенджер уже используется с локальными аккаунтами (email + пароль), переход на SSO — пошаговый: 1) Настроить SSO. 2) Привязать существующие аккаунты к SSO-идентификаторам (по email). 3) Включить обязательный SSO. 4) Отключить локальную аутентификацию. Пользователи при следующем входе будут перенаправлены на IdP.
Дополнительные материалы
- Политика информационной безопасности для мессенджера — включая требования к аутентификации
- Self-hosted vs облачный мессенджер — LDAP/SSO чаще используется с self-hosted
- Безопасные коммуникации — шифрование, аудит, DLP
- Безопасность b8q — архитектура безопасности платформы
- On-premise мессенджер — полный контроль над инфраструктурой
Мессенджер с полноценным SSO
b8q поддерживает LDAP, SAML 2.0, OIDC, SCIM и маппинг групп. Один вход — доступ ко всему.