Страница 1 из 1

Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 30 ноя 2016, 14:21
Борис
Добрый день.

Решил поделиться своим скриптом который служит у меня для интеграцией OTRS с AD.
Из АД так же берется информация о телефоне, пейджере и другом. (так же в скрипте есть)

Добавляем в config.pm

Код: Выделить всё

# # ВКЛЮЧЕНИЕ АУТЕНФИКАЦИИ LDAP ДЛЯ АГЕНТОВ  (ACTIVE DIRECTORY)
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = 'АДРЕС_АД';
$Self->{'AuthModule::LDAP::BaseDN'} = 'DC=**,DC=ru';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::Charset'} = 'utf-8';
$Self->{'AuthModule::LDAP::SourceCharset'} = 'utf-8';
$Self->{'AuthModule::LDAP::DestCharset'} = 'utf-8';
$Self->{'AuthModule::LDAP::GroupDN'} = 'cn=ГРУППА_ДОСТУПА_В_АД,ou=Security,ou=Groups,ou=**,ou=Moskva,ou=Clients,dc=**,dc=ru';
$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'cn=ИМЯ_LDAP_УЧЕТКИ,ou=Service Users,DC=**,DC=ru';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'ПАРОЛЬ_LDAP_УЧЕТКИ';
$Self->{'AuthModule::LDAP::AlwaysFilter'} = '';
 $Self->{'AuthModule::LDAP::Params'} = {
 port => 3268,
 timeout => 240,
 async => 0,
 version => 3,
 };
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'АДРЕС_АД';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'DC=**,DC=ru';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'cn=ИМЯ_LDAP_УЧЕТКИ,ou=Service Users,dc=**,dc=ru';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'ПАРОЛЬ_LDAP_УЧЕТКИ';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
Phone => 'telephoneNumber', 
Username => 'sAMAccountName', 
comment => 'description',
};
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];

   # Настройка LDAP авторизации для клиентов
    $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
    $Self->{'Customer::AuthModule::LDAP::Host'} ='АДРЕС_АД';
    $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'OU=Clients,DC=**,DC=ru';
    $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
    $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} ='cn=ИМЯ,ou=Service Users,dc=**,dc=ru';
    $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'ПАРОЛЬ';
    $Self->{CustomerUser} = {
            Name => 'LDAP Backend NVG',
            Module => 'Kernel::System::CustomerUser::LDAP',
            Params => {
            Host => 'АДРЕС АД',
            BaseDN => 'OU=Clients,DC=**,DC=ru',
            SSCOPE => 'sub',
            SourceCharset => 'utf-8',
            DestCharset => 'utf-8',
            UserDN => 'cn=ИМЯ,ou=Service Users,dc=**,dc=ru',
            UserPw => 'ПАРОЛЬ',
            Params => {
                port    => 3268,
                timeout => 240,
                async   => 0,
                version => 3,
            },
        },

        # Unique customer key/id
        CustomerKey => 'sAMAccountName',
        CustomerID => 'sAMAccountName',
        CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
        CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
        CustomerUserSearchListLimit => 250,
        CustomerUserPostMasterSearchFields => ['mail'],
        CustomerUserNameFields => ['givenname', 'sn'],
		CustomerUserNameFields => ['cn'],
        CustomerUserExcludePrimaryCustomerID => 0,
        AdminSetPreferences => 0,
        Map => [
            # note: Login, Email and CustomerID needed!
	[ 'UserFullName',   'ФИО',        'cn',              1, 1, 'var', '', 0 ],
	[ 'UserEmail',      'Email',      'mail',            1, 1, 'var', '', 0 ],
    [ 'UserCustomerID', 'CustomerID', 'sAMAccountName',  0, 0, 'var', '', 0 ],
    [ 'UserPhone',      'Phone',      'telephonenumber', 1, 1, 'var', '', 0 ],
	[ 'MobilePhone',    'Моб.тел:',   'mobile',          1, 1, 'var', '', 0 ],
	[ 'UserTitle',      'Должность',  'title',           1, 1, 'var', '', 0 ], 
	[ 'Manager',        'Руководитель',  'manager',      1, 1, 'var', '', 0 ],
    [ 'UserCompany',    'Компания',   'company',         1, 1, 'var', '', 0 ],
	[ 'UserAddress',    'Адрес',      'streetAddress',   1, 1, 'var', '', 0 ],
	[ 'City',           'Город',      'l',               1, 1, 'var', '', 0 ],
    [ 'Pager',          'Пейджер:',   'pager',           1, 1, 'var', '', 0 ],
    [ 'Room',           'Комната:',   'physicalDeliveryOfficeName',  1, 1, 'var', '', 0 ],
	[ 'UserFirstname',  'Firstname',  'givenname',       0, 0, 'var', '', 1 ],
    [ 'UserLastname',   'Lastname',   'sn',              0, 0, 'var', '', 1 ],
    [ 'UserLogin',      'Username',   'sAMAccountName',  0, 0, 'var', '', 1 ],  
            ],
        };


Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 05 дек 2016, 16:41
dengus
Добрый день!

Дополнительные поля, такие как "руководитель", "пейджер" например, при этом в карточке агента после импорта сами отображаются или эти поля необходимо в форму окна добавлять?

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 07 дек 2016, 09:48
Борис
dengus писал(а):Добрый день!

Дополнительные поля, такие как "руководитель", "пейджер" например, при этом в карточке агента после импорта сами отображаются или эти поля необходимо в форму окна добавлять?
Ничего не нужно добавлять, оно само появится. Инфа берется из ад.
Когда создается заявка, в ней видно информацию из ad о заявители.

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 07 дек 2016, 10:11
ykolesnikov
За появление полей из AD в системе отвечает предложение MAP из примера выше:

Код: Выделить всё

Map => [
            # note: Login, Email and CustomerID needed!
   [ 'UserFullName',   'ФИО',        'cn',              1, 1, 'var', '', 0 ],
   [ 'UserEmail',      'Email',      'mail',            1, 1, 'var', '', 0 ],
    [ 'UserCustomerID', 'CustomerID', 'sAMAccountName',  0, 0, 'var', '', 0 ],
    [ 'UserPhone',      'Phone',      'telephonenumber', 1, 1, 'var', '', 0 ],
   [ 'MobilePhone',    'Моб.тел:',   'mobile',          1, 1, 'var', '', 0 ],
   [ 'UserTitle',      'Должность',  'title',           1, 1, 'var', '', 0 ], 
   [ 'Manager',        'Руководитель',  'manager',      1, 1, 'var', '', 0 ],
    [ 'UserCompany',    'Компания',   'company',         1, 1, 'var', '', 0 ],
   [ 'UserAddress',    'Адрес',      'streetAddress',   1, 1, 'var', '', 0 ],
   [ 'City',           'Город',      'l',               1, 1, 'var', '', 0 ],
    [ 'Pager',          'Пейджер:',   'pager',           1, 1, 'var', '', 0 ],
    [ 'Room',           'Комната:',   'physicalDeliveryOfficeName',  1, 1, 'var', '', 0 ],
   [ 'UserFirstname',  'Firstname',  'givenname',       0, 0, 'var', '', 1 ],
    [ 'UserLastname',   'Lastname',   'sn',              0, 0, 'var', '', 1 ],
    [ 'UserLogin',      'Username',   'sAMAccountName',  0, 0, 'var', '', 1 ],  
            ],
        };

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 07 дек 2016, 12:01
dengus
Большое спасибо!
Получается, что при подключении к LDAP, OTRS получает данные по пользователям постоянными запросами при обращении к требуемым полям, а не разово при логине? По сути LDAP как внешнее хранилище и OTRS не берет данные из таблицы MySql. А если LDAP не подключать, то для увеличения количества информационных полей таки требуется добавление соответсвующих полей в MySql БД в таблицу customer_user и маппинг в config.pm. Я правильно понимаю?

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 07 дек 2016, 12:55
Борис
dengus писал(а):Большое спасибо!
Получается, что при подключении к LDAP, OTRS получает данные по пользователям постоянными запросами при обращении к требуемым полям, а не разово при логине? По сути LDAP как внешнее хранилище и OTRS не берет данные из таблицы MySql. А если LDAP не подключать, то для увеличения количества информационных полей таки требуется добавление соответсвующих полей в MySql БД в таблицу customer_user и маппинг в config.pm.
Где она хранится после получения из АД, не знаю точно, но думаю нигде, т.к. стоит только отключить лдап или изменить сервер на заведомо неверный, он не сможет найти информацию о клиенте и будет пустота.
LDAP служит для атозаполнения полей которые прописаны в конфиге. если не подключать ldap, нужно что бы что то другое автоматически заполняла поля которые вы захотите выводить. Просто создать пустые поля много ума не нужно.

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 28 дек 2016, 14:57
dengus
Подскажите поле UserCustomerID при подключении к AD можно выбирать и mail и company к примеру.
При этом чтобы связать это поле по ID с компанией-клиентом, вручную добавленной в систему, и установить например просто нужный ID в виде числа не получается.
Если несколько пользователей вошедших в систему по LDAP авторизации с одним CustomerID (название компании из LDAP) создадут заявки, то по клику на компании можно получить все заявки группой. Однако такого клиента в базе не существует. Вручную на пользователях проставить нужный СustomerID невозможно.
Можно ли привязать пользователей из LDAP к клиенту-компании в базе?

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 28 дек 2016, 15:31
ykolesnikov
Что-то Вы все в кучу смешали.
Пусть CustomerID берется из AD - как организация клиента, а для однозначной идентификации будет логин и почта. В OTRS для расшифровки, в разделе "Компании клиентов" заносите ручками - CustomerID и соответствующее ему наименование. В чем проблема?

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 28 дек 2016, 15:50
dengus
CustomerID у каждого пользователя берется из LDAP и выглядит в виде названия компании, где работает пользователь. В базе OTRS компания-клиент аналогично создана в Администрирование-Клиенты (Компании клиента-Клиенты). Но она не взаимосвязана с пользователями из LDAP. При этом у пользователей из LDAP невозможно изменить поле ID компании, так как LDAP используется как внешнее хранилище и ОТРС не имеет возможности правки данных в нем.
Также имеются несколько пользователей созданных непосредственно в ОТРС и они привязаны к ID компании Клиента из базы ОТРС.
Как связать компанию-клиент из базы ОТРС с CustomerID у пользователей из LDAP?

То есть предлагаете в ID компании клиента в базе ОТРС ставить не число, а то название, что берется у пользователей из LDAP?

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 28 дек 2016, 16:04
dengus
Все, спасибо. С этим разобрался.

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 23 окт 2017, 16:52
solnushkina
Добрый день.
А как разобрались? та же проблема...

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 16 фев 2018, 11:00
website
Добрый день! Не могу разобраться с интеграцией AD, установил на CentOs 7 OTRS 6, по вашему шаблону настраивал, но когда ввожу данные с AD ортс не видит AD
Сначала делал все по этой инструкции https://vmkh.net/integratsiya-otrs-s-active-directory/ , но после как там конфиг настраиваю все ORTS падает вообще не заходит, а через ваш кконфиг заходит но при введении учетки вообще не видит AD

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 05 мар 2018, 09:27
Борис
website писал(а):Добрый день! Не могу разобраться с интеграцией AD, установил на CentOs 7 OTRS 6, по вашему шаблону настраивал, но когда ввожу данные с AD ортс не видит AD
Сначала делал все по этой инструкции https://vmkh.net/integratsiya-otrs-s-active-directory/ , но после как там конфиг настраиваю все ORTS падает вообще не заходит, а через ваш кконфиг заходит но при введении учетки вообще не видит AD
Вы указали сервер ad и путь к OU в шаблоне?
$Self->{'AuthModule::LDAP::Host'} = 'АДРЕС_АД';
$Self->{'AuthModule::LDAP::BaseDN'} = 'DC=**,DC=ru';

Группу доступа и путь до ou указали?
$Self->{'AuthModule::LDAP::GroupDN'} = 'cn=ГРУППА_ДОСТУПА_В_АД,ou=Security,ou=Groups,ou=**,ou=Moskva,ou=Clients,dc=**,dc=ru';

Учетку ввели?
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'cn=ИМЯ_LDAP_УЧЕТКИ,ou=Service Users,DC=**,DC=ru';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'ПАРОЛЬ_LDAP_УЧЕТКИ';

Порт ldap не меняли?
port => 3268,

Аналогично и для # Настройка LDAP авторизации для клиентов

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 24 янв 2019, 18:02
vtychinin
Борис, добрый день.
А не подскажете, после настройки конфига не удается авторизоваться агентом root, при этом под пользователями из AD авторизация проходит без проблем. Убираю из файла /opt/otrs/Kernel/Config.pm все настройки по подключению к AD. Все работает и могу авторизоваться под root. Где могу ошибаться?

Код: Выделить всё

# ----------------LDAP-Authenticated-------------- #

$Self->{'DefaultCharset'} = 'utf-8';
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = 'dc1.emelya.ru';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=emelya,dc=ru';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';

# Проверка наличия пользователя в группе OTRS_Agents, для доступа к Агентурному порталу
$Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRSagents,ou=Users,dc=emelya,dc=ru';
$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'root@emelya.ru';
$Self->{'AuthModule::LDAP::SearchUserPw'} = '******';
$Self->{'AuthModule::LDAP::Params'} = {
 port => 389,
 timeout => 120,
 async => 0,
 version => 3,
 },

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 24 янв 2019, 18:10
alexus
Добрый день!

А у вас такой агент в AD есть? Вы включили авторизацию агентов через AD, значит логин и пасс проверяются по AD. Когда отключаете - берутся настройки авторизации по умолчанию - из БД OTRS. Сделайте своему агенту права админа и не мучайтесь. А под рутом работать не хорошо ;)

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 25 янв 2019, 09:21
vtychinin
alexus писал(а):
24 янв 2019, 18:10
Добрый день!

А у вас такой агент в AD есть? Вы включили авторизацию агентов через AD, значит логин и пасс проверяются по AD. Когда отключаете - берутся настройки авторизации по умолчанию - из БД OTRS. Сделайте своему агенту права админа и не мучайтесь. А под рутом работать не хорошо ;)
Добрый день. В AD агент есть, логин, пароль, имя и фамилия совпадают. Что значит "включил авторизацию через AD" ?
Под рутом не работаю, у меня 3 агента, и со всеми такая беда. Т.е. пользователи через Сustomer заходят без проблем. А именно все агенты авторизоваться не могут с данным конфигом в /opt/otrs/Kernel/Config.pm. Если убираю запись из конфига, то действительно данные берутся из БД otrs и все работает.

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 25 янв 2019, 10:14
paver
Если способ авторизации в конфиге не указан, она осуществляется во внутренней БД. Если указали AD/LDAP - будет AD/LDAP. Чтобы было и то, и другое - в конфиге должно быть по 2 блока описаний источников данных и способов авторизации (с цифирками 1 и 2).

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 25 янв 2019, 10:17
vtychinin
paver писал(а):
25 янв 2019, 10:14
Если способ авторизации в конфиге не указан, она осуществляется во внутренней БД. Если указали AD/LDAP - будет AD/LDAP. Чтобы было и то, и другое - в конфиге должно быть по 2 блока описаний источников данных и способов авторизации (с цифирками 1 и 2).
Добрый день.
Мне авторизация по внутренней БД не нужна. Можете подсказать, что в конфиге не так сейчас? Проблема имено с авторизацией агентов, после добавление этого кода в конфиг.

Код: Выделить всё

# ----------------LDAP-Authenticated-------------- #

$Self->{'DefaultCharset'} = 'utf-8';
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = 'dc1.emelya.ru';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=emelya,dc=ru';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';

# Проверка наличия пользователя в группе OTRSagents, для доступа к Агентурному порталу
$Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRSagents,ou=Users,dc=emelya,dc=ru';
$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'root@emelya.ru';
$Self->{'AuthModule::LDAP::SearchUserPw'} = '******';
$Self->{'AuthModule::LDAP::Params'} = {
 port => 389,
 timeout => 120,
 async => 0,
 version => 3,
 },

# Синхронизация пользователей из каталога LDAP
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'dc1.emelya.ru';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=emelya,dc=ru';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'root@emelya.ru';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = '******';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
 UserFirstname => 'givenName',
 UserLastname => 'sn',
 UserEmail => 'mail',
 };
# Синхронизировать пользователей из указанного каталога
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
 'ActiveUsers',
 ];

# Авторизация LDAP в клиентский портал
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} ='dc1.emelya.ru';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=emelya,dc=ru';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'root@emelya.ru';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = '*****';
$Self->{CustomerUser} = {
 Module => 'Kernel::System::CustomerUser::LDAP',
 Params => {
 Host => 'dc1.emelya.ru',
 BaseDN => 'dc=emelya,dc=ru',
 SSCOPE => 'sub',
 UserDN => 'root@emelya.ru',
 UserPw => '*******',
 AlwaysFilter => '(&(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
 SourceCharset => 'utf-8',
 DestCharset => 'utf-8',
 },

CustomerKey => 'sAMAccountName',
 CustomerID => 'mail',
 CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
 CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
 CustomerUserSearchPrefix => '',
 CustomerUserSearchSuffix => '*',
 CustomerUserSearchListLimit => 10000,
 CustomerUserPostMasterSearchFields => ['mail'],
 CustomerUserNameFields => ['givenname', 'sn'],
 Map => [
 #[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
 [ 'UserFirstname', 'Firstname', 'displayname', 1, 1, 'var' ],
 [ 'UserLastname', 'Lastname', '', 1, 1, 'var' ],
 [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
 [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
 [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ],
 ],
 };

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 25 янв 2019, 11:13
paver
Заведите тему в нужной ветке форума и четко опишите проблему. Я так и не понял, чего именно вы хотите.
На всякий случай: агенты и клиенты - разные категории пользователей, и для них нужны свои собственные описания бэкэндов и способов авторизации в конфиге.

Re: Авторизация в OTRS через AD / интеграция с LDAP

Добавлено: 25 янв 2019, 19:37
alexus
Что-то и я пропустил. Howto - не место для дискуссий, пишите в Help