Перейти к основному содержимому

Интеграция с ActiveDirectory (LDAP/LDAPS)

В YouGile можно управлять доступом пользователей в систему через ActiveDirectory.

В Active Directory необходимо создать группу, которая будет отвечать за наличие доступа пользователя в YouGile. Все пользователи, добавленные в эту группу, должны иметь уникальное поле mail.

Важно: адрес электронной почты должен быть указан именно на вкладке General в свойствах учётной записи пользователя Active Directory (поле e-mail).

YouGile использует значение атрибута mail из Active Directory в качестве логина пользователя. Пароль пользователя служит паролем для входа в YouGile.

Для корректной работы интеграции с Active Directory в YouGile также необходимо наличие не только атрибута mail, но и атрибута userPrincipalName (UPN).

Если у пользователя в Active Directory задан mail, но отсутствует userPrincipalName, такой пользователь будет синхронизирован и появится в YouGile, однако авторизация для него будет невозможна.

В логах при попытке входа в систему будет зафиксирована ошибка следующего вида:

Verification failed for undefined yougile_ad@mycompany.com

Чтобы исключить загрузку пользователей без userPrincipalName, рекомендуется явно указать это требование в LDAP-фильтре:

"filter": "&(objectClass=user)(mail=*)(userPrincipalName=*)(memberOf=CN=yougile_user,OU=app,DC=mycompany,DC=com)"

В этом случае в YouGile будут загружаться только пользователи, у которых заполнены оба атрибута — mail и userPrincipalName, и которые состоят в указанной группе Active Directory.

В файл conf.json необходимо добавить настройки по следующему примеру:


"init": {
"scripts": ["auth/auth-sync-ldap.js", "auth/check-sync.js"],
"auth": "auth/auth-ldap.js"
},
"activeDirectory": {
"url": "ldaps://mycompany.com",
"baseDN": "dc=mycompany,dc=com",
"username": "yougile_ad@mycompany.com",
"password": "***"
},
"activeDirectoryOpts": {
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(userPrincipalName=*)(memberOf=CN=yougile_user,OU=app,DC=mycompany,DC=com)"
},

После перезапуска сервиса yougile, в систему смогут входить только те пользователи, которые подходят под условие, указанное в поле filter (в данном примере это пользователи из группы yougile_user).

Если в Active Directory часть пользователей убрать из группы, указанной в параметре filter, они будут удалены из YouGile. Однако, если таких пользователей окажется больше 10, удаление не произойдёт. Это ограничение служит защитой от массового удаления пользователей в случае ошибки настройки или сбоя Active Directory.

Чтобы увеличить допустимое количество удаляемых пользователей за одну синхронизацию, добавьте параметр activeDirectoryMaxDelete на верхний уровень файла conf.json (не внутрь блока activeDirectory или activeDirectoryOpts).

Например:

{
"init": {
"scripts": ["auth/auth-sync-ldap.js", "auth/check-sync.js"],
"auth": "auth/auth-ldap.js"
},
"activeDirectory": {
"url": "ldaps://mycompany.com",
"baseDN": "dc=mycompany,dc=com",
"username": "yougile_ad@mycompany.com",
"password": "***"
},
"activeDirectoryOpts": {
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(userPrincipalName=*)(memberOf=CN=yougile_user,OU=app,DC=mycompany,DC=com)"
},
"activeDirectoryMaxDelete": 20
}

В приведённом примере за одну синхронизацию будет разрешено удалить до 20 пользователей. Если количество пользователей, подлежащих удалению, превысит указанное значение, синхронизация не выполнит удаление пользователей.

Также можно подключить одновременно несколько серверов ActiveDirectory, в этом случае, в YouGile будут добавляться все пользователи, которые есть во всех указанных серверах. Для этого в полях activeDirectory и activeDirectoryOpts необходимо указать массив настроек. Пример:


"init": {
"scripts": ["auth/auth-sync-ldap.js", "auth/check-sync.js"],
"auth": "auth/auth-ldap.js"
},
"activeDirectory": [
{
"url": "ldaps://domain1.com",
"baseDN": "dc=domain1,dc=com",
"username": "yougile_ad1@domain1.com",
"password": "***"
},
{
"url": "ldaps://domain2.com",
"baseDN": "dc=domain2,dc=com",
"username": "yougile_ad2@domain2.com",
"password": "***"
}
],
"activeDirectoryOpts": [
{
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(userPrincipalName=*)(memberOf=CN=yougile_user,OU=app,DC=domain1,DC=com)"
},
{
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(userPrincipalName=*)(memberOf=CN=yougile,OU=app,DC=domain2,DC=com)"
}
],

При этом команда check-ldap не будет работать, чтобы проверять настройки, нужно оставить в conf.json только одно подключение к ActiveDirectory (без массива) и его проверять через check-ldap.

Управление группами и ролями через Active Directory

Создайте свою роль и назначьте ей права на определённые действия с проектами, досками, колонками и задачами. Таким образом можно разграничить просмотр/редактирование выбранных объектов в проекте. Функция доступна начиная с версии 1.95.

Настройка конфигурации для работы через Active Directory

Пример настроек конфигурации conf.json:


"init": {
"scripts": ["auth/auth-sync-ldap.js", "auth/check-sync.js"],
"auth": "auth/auth-ldap.js"
},
"activeDirectory": {
"url": "ldaps://domain.you",
"baseDN": "dc=domain,dc=you",
"username": "admin@domain.you",
"password": "***"
},

При этом фильтрация в AD настраивается следующим образом:


"activeDirectoryOpts": {
"includeDeleted": false,
"filter": "(&(objectClass=user)(mail=*)(userPrincipalName=*)(|(memberOf=CN=yougile_managers,OU=app,DC=domain,DC=you)(memberOf=CN=yougile_watcher,OU=app,DC=domain,DC=you)))",
"roleUsers": {"Manager":"memberOf=CN=yougile_managers,OU=app,DC=domain,DC=you",
"Watcher":"memberOf=CN=yougile_watcher,OU=app,DC=domain,DC=you"}
},

Создавать и изменять роли может тот, у кого есть проекты и кто является Управляющим в них.

Добавление виртуальных сотрудников в компанию

На странице Моя компания в разделе Сотрудники компании будет доступна кнопка Добавить виртуального сотрудника:

Добавление виртуального сотрудника

При нажатии появится всплывающее окно, в котором нужно указать название роли, а также выбрать проекты и роли в них:

Выбор роли и проекта

После нажатия кнопки Добавить вы увидите виртуального сотрудника в общем списке. При клике на него можно выбрать, в какие отделы данный сотрудник будет добавлен:

Выбор сотрудника и отдела

Синхронизация телефонных номеров из Active Directory

Для активации синхронизации телефонных номеров из Active Directory необходимо внести изменения в файл conf.json.

В блоке activeDirectoryOpts требуется:

  • Указать параметр "syncPhones": true
  • Передать массив attributes, в котором обязательно должен присутствовать атрибут "telephoneNumber"

Это связано с тем, что используемая в проекте библиотека по умолчанию не запрашивает атрибут telephoneNumber из Active Directory.

Кроме того, в массиве attributes обязательно должны присутствовать следующие атрибуты:

  • mail
  • userPrincipalName
  • displayName

Пример корректной конфигурации:

"init": {
"scripts": [
"auth/auth-sync-ldap.js",
"auth/check-sync.js"
],
"auth": "auth/auth-ldap.js"
},
"activeDirectory": {
"url": "ldaps://yougile.local",
"baseDN": "dc=yougile,dc=local",
"username": "test@yougile.local",
"password": "Qwerty12345"
},
"activeDirectoryOpts": {
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(memberOf=CN=yougile_user,OU=app,DC=yougile,DC=local)",
"attributes": [
"mail",
"userPrincipalName",
"displayName",
"telephoneNumber"
],
"syncPhones": true
}

По умолчанию интеграция не удаляет телефонные номера пользователей. Если в Active Directory значение telephoneNumber отсутствует или пустое, в системе будет сохранён номер, ранее указанный пользователем или администратором вручную.

Разрешение на удаление номеров

Чтобы включить возможность удаления телефонных номеров при их отсутствии в Active Directory, необходимо дополнительно указать параметр "syncPhonesAllowRemove": true в блоке activeDirectoryOpts.

Пример конфигурации с включённым удалением номеров:

"activeDirectoryOpts": {
"includeDeleted": false,
"filter": "&(objectClass=user)(mail=*)(memberOf=CN=yougile_user,OU=app,DC=yougile,DC=local)",
"attributes": [
"mail",
"userPrincipalName",
"displayName",
"telephoneNumber"
],
"syncPhones": true,
"syncPhonesAllowRemove": true
}