Интеграция OTRS 6.0.5 (Open-source Ticket Request System) с Active Directory. Настройка прозрачной аутентификации SSO (Single Sign On).
Разберем как интегрировать OTRS с Active Directory. Рассмотрим два варианта аутентификации, обычная и прозрачная (SSO).
Исходные данные:
- Развернутая система OTRS 6.0.5 (по этой статье)
- Домен контроллер Windows Server 2012 R2 (JAKONDA.LOCAL)
Для интеграции OTRS с Active Directory, необходимо создать пользователя который будет выступать администратором OTRS и с помощью которого будет осуществляться чтение LDAP, для авторизации всех остальных пользователей системы OTRS.
Создание пользователя в Active Directory
Создаем пользователя (прим. admin.otrs), снимаем галочку «Требовать смены пароля при следующем входе в систему», выставляем галочки «Запретить смену пароля пользователем», «Срок действия пароля не ограничен». После создания пользователя, в свойствах его, указываем адрес электронной почты.
[stextbox id=’warning’]ВАЖНО: у всех пользователей должен существовать адрес электронной почты. Это обязательное условие для всех пользователей OTRS.[/stextbox]
Создаем группу (прим. OTRSagents) и добавляем в нее ранее созданную учетную запись администратора OTRS (admin.otrs).
[stextbox id=’info’]Данная группа будет служить фильтром доступа, на агентурный портал OTRS. Все входящие пользователи в состав этой группы будет иметь доступ, все остальные нет.[/stextbox]
Интеграция OTRS с Active Directory
Заходим на агентурный портал OTRS (http://OTRS_Server_IP/otrs/index.pl), авторизовываемся под учетной записью root@localhost.
Переходим в Администрирование — Агенты:
Редактируем пользователя root@localhost:
Изменяем Логин, Пароль, Email на аналогичные данные от ранее созданного пользователя в Active Directory (admin.otrs).
Редактируем конфигурационный файл /opt/otrs/Kernel/Config.pm. После строки (# insert your own config settings «here» #) вставляем:
# ----------------LDAP-Authenticated-------------- # $Self->{'DefaultCharset'} = 'utf-8'; # Аутентификация LDAP в Агентурный портал $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; # Можно задать страницу редиректа в случае авторизации и деавторизации #$Self->{LoginURL} = 'http://helpdesk/index.pl'; #$Self->{LogoutURL} = 'http://helpdesk/otrs/index.pl?Action=Logout'; $Self->{'AuthModule::LDAP::Host'} = '192.168.1.2'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; # Проверка наличия пользователя в группе OTRS_Agents, для доступа к Агентурному порталу $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRS_Agents,ou=Users,dc=jakonda,dc=local'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; $Self->{'AuthModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{'AuthModule::LDAP::Params'} = { port => 389, timeout => 120, async => 0, version => 3, }, # Синхронизация пользователей из каталога LDAP $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = '192.168.1.2'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; # Синхронизировать пользователей из указанного каталога $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'ActiveUsers', ]; # Авторизация LDAP в клиентский портал $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP'; # Можно задать страницу редиректа в случае авторизации и деавторизации $Self->{CustomerPanelLoginURL1} = 'http://helpdesk/otrs/customer.pl'; $Self->{CustomerPanelLogoutURL1} = 'http://helpdesk/otrs/customer.pl'; $Self->{'Customer::AuthModule::LDAP::Host'} ='192.168.1.2'; $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{CustomerUser} = { Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => '192.168.1.2', BaseDN => 'dc=jakonda,dc=local', SSCOPE => 'sub', UserDN => 'admin.otrs@jakonda.local', UserPw => 'Aa1234567', 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' ], ], }; # ---------------------------------------------------- #
Перезапускаем веб-сервер apache:
service apache2 restart
Проверяем аутентификацию доменных пользователей в агентурном портале (http://OTRS_Server_IP/otrs/index.pl) и пользовательском (http://OTRS_Server_IP/otrs/customer.pl). Для доступа в агентурный портал, пользователь должен состоять в группе OTRSagents.
Агенты создаются в базе OTRS, после первого входа. У созданного агента будут отсутствовать права администратора, для их выдачи нужно авторизоваться под начальным администратором (admin.otrs) и выдать права новому агенту.
Проверим подтянулись ли учетные записи пользователей из Active Directory. Переходим в Администрирование — Учетная запись клиента.
Прозрачная аутентификация SSO (Single Sign On)
Реализацию прозрачной/сквозной (SSO) аутентификации в OTRS, будем осуществлять посредством авторизации Apache в Active Directory.
Выполняем настройку авторизации SSO на Apache в Active Directory по этой статье. При создании KEYTAB-файла, используем созданную ранее учетную запись администратора (admin.otrs).
Редактируем конфигурационный файл /opt/otrs/Kernel/Config.pm. После строки (# insert your own config settings «here» #) вставляем:
# ----------------SSO-LDAP-Authenticated-------------- # $Self->{'DefaultCharset'} = 'utf-8'; # Аутентификация SSO в Агентурный портал $Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth'; $Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '@JAKONDA.LOCAL'; # Можно задать страницу редиректа в случае авторизации и деавторизации #$Self->{LoginURL} = 'http://helpdesk/index.pl'; #$Self->{LogoutURL} = 'http://helpdesk/otrs/index.pl?Action=Logout'; $Self->{'AuthModule::LDAP::Host'} = '192.168.1.2'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; # Проверка наличия пользователя в группе OTRS_Agents, для доступа к Агентурному порталу $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=OTRS_Agents,ou=Users,dc=jakonda,dc=local'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; $Self->{'AuthModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{'AuthModule::LDAP::Params'} = { port => 389, timeout => 120, async => 0, version => 3, sscope => 'sub' }, # Синхронизация пользователей из каталога LDAP $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = '192.168.1.2'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; # Синхронизировать пользователей из указанного каталога $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'ActiveUsers', ]; # Авторизация SSO в клиентский портал $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::HTTPBasicAuth'; $Self->{'Customer::AuthModule::HTTPBasicAuth::ReplaceRegExp'} = '@JAKONDA.LOCAL'; # Можно задать страницу редиректа в случае авторизации и деавторизации $Self->{CustomerPanelLoginURL1} = 'http://helpdesk/otrs/customer.pl'; $Self->{CustomerPanelLogoutURL1} = 'http://helpdesk/otrs/customer.pl'; $Self->{'Customer::AuthModule::LDAP::Host'} ='192.168.1.2'; $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=jakonda,dc=local'; $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'admin.otrs@jakonda.local'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Aa1234567'; $Self->{CustomerUser} = { Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => '192.168.1.2', BaseDN => 'dc=jakonda,dc=local', SSCOPE => 'sub', UserDN => 'admin.otrs@jakonda.local', UserPw => 'Aa1234567', 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' ], ], }; # ---------------------------------------------------- #
Перезапускаем веб-сервер apache:
service apache2 restart
Проверяем аутентификацию доменных пользователей в агентурном портале (http://OTRS_Server_IP/otrs/index.pl) и пользовательском (http://OTRS_Server_IP/otrs/customer.pl). При входе на тот или иной портал, авторизация должна пройти автоматически.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Привет тебе из 2024! Спасибо за статью, она оказалось лучше, чем официальная документация в 2024 года. Наконец-то смог подтянуть клиентскую базу.
Здравствуйте. Попробовал настроить по вашей инструкции. Синхронизация клиентов по ldap работает, но по ссо без ввода логина пароля не заходят. Раньше с ссо дел не имел вообще и нужно ли дополнительно настраивать групповые политики на АД для браузеров или оно без этого должно работать?
Добрый день,
Чтобы SSO аутентификации проходила корректно, необходимо добавить веб-сервер в зону местной интрасети. Можете через GPO распространить данную настройку.
Здравствуйте. Все отлично работает внутри домена. Появилась необходимость работать из внешки в системе. Но при попытке входа в отрс с телефона, говорит ошибка авторизации. Пытался и с префиксом домена и через @domain.name , везде ошибка авторизации
Добрый день! Попробуйте в настройках виртуального сервера добавить KrbLocalUserMapping On к остальным параметрам Kerberos авторизации.
У меня вот так выглядит настройка Kerberos для виртуального сервера OTRS
AuthType Kerberos
AuthName «Kerberos authenticated intranet»
KrbAuthRealms JAKONDA.LOCAL
KrbServiceName HTTP/webserver.jakonda.local
Krb5Keytab /etc/webserver.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbSaveCredentials Off
KrbLocalUserMapping On
KrbVerifyKDC Off
Require valid-user
И авторизация успешно работает. Т.е. в локальной сети при входе на OTRS происходит SSO авторизация, а при внешнем подключении запрашивается логин\пароль и введя доменный логин (без указания домена) и пароль, меня успешно авторизовывает.
Всё делал по вашей инструкции, ошибок никаких не выдаёт, а просто не авторизуется не через index, не через customer. В чем может быть проблема?
Нашёл ошибку в строке
$Self->{‘AuthModule::LDAP::GroupDN’} = ‘cn=OTRS_Agents,ou=Users,dc=jakonda,dc=local’;
Поменял ou=Users на cn=Users и всё заработало.
Но SSO авторизация для клиентов не пашет, пока ковыряю
Никакой ошибки нет, просто в моем случае указано cn=OTRS_Agents — это группа безопасности в которой указаны учетные записи пользователей, которая в свою очередь находится в ou=Users домена dc=jakonda,dc=local.
Добрый день.
Настроена обычная интеграция с LDAP
«Агенты создаются в базе OTRS, после первого входа.» можно ли как-то создавать агентов до их первого входа, что бы можно было заранее раздать им роли?
В access.log: 192.168.1.200 — user@DOMAIN.LOCAL [04/May/2018:16:57:12 +0300]
«GET /otrs/index.pl HTTP/1.1» 500 1068 «-» «Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3)»
HTTP/1.1» 500 — проверяйте ошибку 500, вероятно все таки что то не так бы делаете, либо в конфигурационном файле прописываете..
Доброго времени суток.
Подскажите, вот такая ошибочка в конце: [Fri May 04 11:43:57.269243 2018] [auth_kerb:error] [pid 21032] [client 192.168.1.200] gss_acquire_cred() failed: Unspecified GSS failure.
Minor code may provide more information (, Key table file ‘/etc/kerberos.keytab’ not found)
Или здесь ( Krb5Keytab /etc/kerberos.keytab
)нужно прописать файл: который был в Вашем случаи: webserver.keytab
А вы сгенерировали keytab файл ?
Да, подставил он у меня называется otrs. Проверяю ошибка: [:error] [pid 1633] Attempt to reload Kernel/System/ObjectManager.pm aborted.\nCompilation failed in require at /opt/otrs/bin/cgi-bin/index.pl line 35.\nBEGIN failed—compilation aborted at /opt/otrs/bi$
$trs/bin/cgi-bin/index.pl line 35.\n