# Интеграция с Active Directory

Интеграция **Webim** с **Active Directory** позволяет использовать учётные записи из одного или нескольких доменов для входа операторов в административную часть **Webim**, управлять правами доступа через группы безопасности Active Directory и синхронизировать данные операторов.

!!! Note "N.B."
    Данная функциональность является [тарифной опцией](https://webim.ru/price/). Чтобы её подключить, обратитесь, пожалуйста в [техническую поддержку](mailto:support@webim.ru) **Webim** или к вашему аккаунт-менеджеру.

## Назначение интеграции

Интеграция **Webim** с **Active Directory** решает следующие задачи:

  * **Единый вход (SSO)**. Операторы входят в **Webim** под доменной учётной записью без отдельного пароля. Для аутентификации используется **Kerberos**.

  * **Централизованное управление доступом**. Права операторов и доступные им отделы определяются членством в группах безопасности **Active Directory**. Эти группы сопоставляются с группами безопасности в **Webim**.

  * **Автоматическое создание и обновление операторов**. При первом успешном входе через **Active Directory** оператор может быть создан автоматически. При последующих входах и при синхронизации данные оператора актуализируются по данным **Active Directory**, в соответствии с настройками **SSO**.

  * **Фоновая и ручная синхронизация операторов**. **Webim** может периодически синхронизировать данные операторов с **Active Directory** и выполнять синхронизацию по запросу администратора. При включённой периодической синхронизации используется брокер сообщений **Kafka**.

## Задействованные компоненты

В интеграции участвуют следующие компоненты:

  * **Webim Server**. Обрабатывает запросы операторов, выполняет аутентификацию и авторизацию, обновляет данные операторов и управляет очередями синхронизации.

  * **Active Directory**. Источник данных о пользователях и группах безопасности. Участвует в **Kerberos-аутентификации** и отвечает на **LDAP-запросы**.

  * **Kerberos**. Механизм аутентификации, используемый при **SSO-входе**. В доменной инфраструктуре предоставляется контроллером домена.

  * **LDAP/LDAPS**. Протокол доступа к каталогу. Используется для получения данных о пользователях и их членстве в группах.

  * **Kafka**. Используется для фоновой синхронизации операторов с данными **Active Directory** (при включенной периодической синхронизации).

## Карта документации по интеграции с Active Directory

| Задача                                                                             | Статья                                                                                                                               |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Настройка **Kerberos** (**SPN**, `keytab`, `krb5.conf` и параметры **Kerberos**)   | [Интеграция с Active Directory: настройка Kerberos](https://webim.ru/kb/devops/active-directory/kerberos-configuration.html)                                                       |
| Настройка подключения к **LDAP/LDAPS** и параметры поиска пользователей            | [Интеграция с Active Directory: настройка LDAP](https://webim.ru/kb/devops/active-directory/ldap-configuration.html)                                                               |
| Включение **SSO** и выбор режима авторизации операторов                            | [Интеграция с Active Directory: SSO и режимы авторизации](https://webim.ru/kb/devops/active-directory/sso-configuration.html)                                                      |
| Настройка группы безопасности **Webim** и работы операторов с **Active Directory** | [Интеграция с Active Directory: операторы и группы безопасности](https://webim.ru/kb/for-admins/active-directory-operators-and-security-groups.html) |
| Диагностировать ошибки **Kerberos**, **LDAP**, **SSO** и синхронизации             | [Интеграция с Active Directory: диагностика и типовые ошибки](https://webim.ru/kb/devops/active-directory/troubleshooting.html)                                                    |

## Ограничения и требования

### Требования к доменной инфраструктуре

  * Развёрнут контроллер домена **Active Directory**.

  * В домене созданы:

    * учётные записи пользователей, которые будут работать в **Webim**;

    * группы безопасности, через которые будет управляться доступ операторов.

  * Настроены **SPN** и `keytab` для **Kerberos-аутентификации** (см. статью [Настройка Kerberos](https://webim.ru/kb/devops/active-directory/kerberos-configuration.html)).

### Требования к серверу Webim

#### Сетевой доступ к контроллеру домена

Сервер **Webim** должен иметь возможность подключаться к контроллеру домена по сети. Ниже перечислены **сетевые порты**, которые должны быть разрешены между сервером **Webim** и контроллером домена:

  * **DNS** — TCP/UDP **53**. Нужен для разрешения доменных имён и служебных **SRV-записей**, которые используются **Kerberos** и **LDAP**.

  * **NTP** — UDP **123**. Нужен для синхронизации времени. Для **Kerberos** критично, чтобы время на сервере **Webim** и на контроллере домена совпадало (расхождение приводит к ошибкам аутентификации).

  * **Kerberos (KDC)** — TCP/UDP **88**. Порт службы **Kerberos** на контроллере домена. Используется при входе операторов через **SSO**.

  * **LDAP** — TCP **389**. Используется **Webim** для получения данных о пользователях и их группах безопасности в домене.

  * **LDAPS** — TCP **636**. Используется вместо **LDAP**, если в конфигурации **LDAP** включён параметр `use_ssl=true`.

#### Пакеты и утилиты на сервере Webim

На сервере **Webim** должны быть установлены клиентские утилиты **Kerberos** и **LDAP** (для работы и диагностики). Например:

  * **Debian/Ubuntu**: `krb5-user`, `libsasl2-modules-gssapi-mit`, `ldap-utils`.

  * **RHEL-подобные**: `krb5-workstation`, `cyrus-sasl-gssapi`, `openldap-clients`.

#### Синхронизация времени

Время на сервере **Webim** должно быть синхронизировано с временем на контроллере домена. Существенное расхождение приводит к ошибкам **Kerberos-аутентификации**.

#### Kafka для фоновой синхронизации

**Kafka** требуется только для **периодической** синхронизации операторов с **Active Directory** (параметр `sso.enable_periodic_synchronization=true`).

Сервис **Admin Backend** должен быть запущен с параметром `--kafka-connection`, который указывает на именованное подключение из файла `/etc/webim/kafka.json`.

Минимальный пример `/etc/webim/kafka.json`:

  ```json
  {
    "my_local_kafka": {
      "bootstrap_servers": "kafka:9092",
      "user": "webim",
      "password": "secret"
    }
  }
  ```

Внутри подключения используются поля:

  * `bootstrap_servers` — список брокеров **Kafka** (как строка, например `kafka1:9092,kafka2:9092`).

  * `user`, `password` — учётные данные **SASL (PLAIN)**, используемые **Admin Backend** при подключении к **Kafka**.

Если периодическая синхронизация отключена, **Kafka** для интеграции с **Active Directory** не требуется.

---

Источник: https://webim.ru/kb/devops/active-directory/index.html
