Создание корпоративных порталов является распространенной практикой среди компаний с большим количеством информационных систем. Наличие единой точки доступа ко всем необходимым для работы ресурсам избавляет от необходимости путаться в десятках закладок и держать в голове несколько паролей, а значит позволяет работникам компаний максимально сосредоточиться на своей работе. Одной из ключевых информационных систем при этом, конечно же, является система корпоративного общения и электронной почты, ведь её, вне зависимости от направления работы, так или иначе пользуются практически все сотрудники предприятия.
Zimbra Collaboration Suite Open-Source Edition как раз является цифровым рабочим местом, способным предоставить доступ не только к электронной почте, но также к цифровым календарям, спискам задач, адресным книгам, а с помощью набора расширений Zextras Suite Pro и к совместному редактированию документов, корпоративному текстовому и видеочату и персональному хранилищу Drive. Ко всему прочему, Zimbra OSE можно с легкостью интегрировать в корпоративный портал. Давайте же посмотрим на то, как это можно сделать на примере домена company.ru.
Существуют два интерфейса интеграции Zimbra OSE с корпоративным порталом. Первый, URL-интерфейс, заключается в создании специальной ссылки, на основе которой можно создать баннер, при нажатии на который авторизованный на корпоративном портале пользователь перенаправляется в свою учетную запись Zimbra OSE и может спокойно выполнять свои задачи. Второй основан на предварительной авторизации с использованием SOAP-интерфейса. Первый интерфейс наиболее распространен и используется из-за простоты его интеграции с большинством веб-порталов. Второй интерфейс обычно используется с порталами, которые требуют контроля над созданием токена аутентификации и перенаправлением пользователя.
В обоих случаях первым делом нам необходимо подготовить наш почтовый домен. Для этого нужно создать ключ предварительной аутентификации. Делается это с помощью команды zmprov generateDomainPreAuthKey company.ru. В выводе данной команды будет содержаться 64-символьный ключ, который получается за счет случайной генерации 32 знаков и их шифрования, например preAuthKey: 9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31. Этот ключ впоследствии можно будет вновь просмотреть при помощи команды zmprov gd company.ru zimbraPreAuthKey. После этого следует перезапустить почтовый сервер, чтобы внесенные изменения вступили в силу.
Разберемся в том, как реализовать предварительную аутентификацию с помощью URL- интерфейса. Затем на основании этого ключа предварительной авторизации мы создадим специальный URL-адрес, по которому уже авторизованный на корпоративном портале пользователь сможет войти в Zimbra OSE без необходимости ввода пароля. URL-адрес будет иметь вид mail.company.ru/service/preauth?{account-identifier}{by-value}{time}{expires}[&admin=1]{computed-preauth}.
Параметрами в данном URL являются:
Вычисление {computed-preauth} производится следующим образом:
Например, имея следующие данные:
Можно сформировать следующий набор информации manager@company.ru|name|0|1579862639. Затем из этой строки можно вычислить SHA-1 HMAC: preauth = hmac(«manager@company.ru|0|1579862639»,«9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31»); В результате получаем значение {computed-preauth} 93a43cd03a5b2fca40f46c3ce99b4a4dd6e5676a.
Теперь используем его для составления URL: mail.company.ru/service/preauth?account=manager@company.ru&expires=0×tamp=1579862639&preauth=93a43cd03a5b2fca40f46c3ce99b4a4dd6e5676a. Перейдя по этому URL можно будет попасть в веб-клиент Zimbra и получить токен аутентификации без необходимости ввода имени учетной записи или пароля.
Если же вы хотите осуществить предварительную аутентификацию, то для вычисления HMAC используйте данные "admin@company.ru|1|name|0|1579862639", а для входа используйте URL mail.company.ru/service/preauth?account=admin@company.ru&expires=0×tamp=1579862639&preauth=7b410ed71e4eb6c7724598587ae03078bca5e29f&admin=1
В случае же с SOAP-интерфейсом, используется стандартный запрос AuthRequest, в котором вместо пароля передаются данные предварительной аутентификации по следующему шаблону:
Заполним этот шаблон на примере manager@company.ru:
После этого остается только сформировать ссылку company.ru/CorpPortal/preauth?isredirect=1&authtoken={...} с указанием токена аутентификации, которая перенаправит пользователя на сервер Zimbra, и внедрить её с использованием уже знакомого нам URL-интерфейса.
Ещё одной задачей перед системным администратором, внедряющим предварительную аутентификацию Zimbra на своем корпоративном портале является автоматизация вычисления значения {computed-preauth}. Добиться этого можно при помощи скрипта, который будет автоматически подставлять все требуемые данные и на выходе предоставлять готовую для предварительной аутентификации ссылку. Вот пара примеров таких скриптов:
Python/Django
PHP
По всем вопросам, связанными c Zextras Suite вы можете обратиться к Представителю компании «Zextras» Екатерине Триандафилиди по электронной почте ekaterina.triandafilidi@zextras.com
Zimbra Collaboration Suite Open-Source Edition как раз является цифровым рабочим местом, способным предоставить доступ не только к электронной почте, но также к цифровым календарям, спискам задач, адресным книгам, а с помощью набора расширений Zextras Suite Pro и к совместному редактированию документов, корпоративному текстовому и видеочату и персональному хранилищу Drive. Ко всему прочему, Zimbra OSE можно с легкостью интегрировать в корпоративный портал. Давайте же посмотрим на то, как это можно сделать на примере домена company.ru.
Существуют два интерфейса интеграции Zimbra OSE с корпоративным порталом. Первый, URL-интерфейс, заключается в создании специальной ссылки, на основе которой можно создать баннер, при нажатии на который авторизованный на корпоративном портале пользователь перенаправляется в свою учетную запись Zimbra OSE и может спокойно выполнять свои задачи. Второй основан на предварительной авторизации с использованием SOAP-интерфейса. Первый интерфейс наиболее распространен и используется из-за простоты его интеграции с большинством веб-порталов. Второй интерфейс обычно используется с порталами, которые требуют контроля над созданием токена аутентификации и перенаправлением пользователя.
В обоих случаях первым делом нам необходимо подготовить наш почтовый домен. Для этого нужно создать ключ предварительной аутентификации. Делается это с помощью команды zmprov generateDomainPreAuthKey company.ru. В выводе данной команды будет содержаться 64-символьный ключ, который получается за счет случайной генерации 32 знаков и их шифрования, например preAuthKey: 9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31. Этот ключ впоследствии можно будет вновь просмотреть при помощи команды zmprov gd company.ru zimbraPreAuthKey. После этого следует перезапустить почтовый сервер, чтобы внесенные изменения вступили в силу.
Разберемся в том, как реализовать предварительную аутентификацию с помощью URL- интерфейса. Затем на основании этого ключа предварительной авторизации мы создадим специальный URL-адрес, по которому уже авторизованный на корпоративном портале пользователь сможет войти в Zimbra OSE без необходимости ввода пароля. URL-адрес будет иметь вид mail.company.ru/service/preauth?{account-identifier}{by-value}{time}{expires}[&admin=1]{computed-preauth}.
Параметрами в данном URL являются:
- {account-identifier} и {by-value}, которые нужны для идентификации учетной записи. В первом параметре указывается её идентификатор, а во втором вид этого идентификатора. Если вид используемого {by-value} не указан, используется аутентификация по имени.
- {time} представляет из себя временную отметку, преобразованную во время Unix
- {expires} является временем в миллисекундах, после которого истекает срок действия токена аутентификации. Если в качестве значения этого параметра указан 0, используется время истечения токена для учетной записи по умолчанию
- [&admin=1] данный параметр нужен только в том случае, если вы хотите использовать предварительную аутентификацию для входа не только в веб-клиент, но и в консоль администрирования. Если этот параметр указан, вводите его между параметрами {account-identifier} и {by-value} при вычислении HMAC.
- {computed-preauth} вычисленное значение предварительной аутентификации.
Вычисление {computed-preauth} производится следующим образом:
- Необходимо собрать вместе значения {account-identifier}, {by-value}, {time} и {expires} именно в этом порядке
- Выстроить их в ряд, разделив знаком "|"
- Вычислить HMAC с использованием DomainPreAuthKey
- Перевести значение HMAC в шестнадцатеричный вид
Например, имея следующие данные:
- DomainPreAuthKey: 9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31
- {account-identifier}: manager@company.ru
- {by-value}: name
- {expires}: 0
- {time}: 1579862639
Можно сформировать следующий набор информации manager@company.ru|name|0|1579862639. Затем из этой строки можно вычислить SHA-1 HMAC: preauth = hmac(«manager@company.ru|0|1579862639»,«9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31»); В результате получаем значение {computed-preauth} 93a43cd03a5b2fca40f46c3ce99b4a4dd6e5676a.
Теперь используем его для составления URL: mail.company.ru/service/preauth?account=manager@company.ru&expires=0×tamp=1579862639&preauth=93a43cd03a5b2fca40f46c3ce99b4a4dd6e5676a. Перейдя по этому URL можно будет попасть в веб-клиент Zimbra и получить токен аутентификации без необходимости ввода имени учетной записи или пароля.
Если же вы хотите осуществить предварительную аутентификацию, то для вычисления HMAC используйте данные "admin@company.ru|1|name|0|1579862639", а для входа используйте URL mail.company.ru/service/preauth?account=admin@company.ru&expires=0×tamp=1579862639&preauth=7b410ed71e4eb6c7724598587ae03078bca5e29f&admin=1
В случае же с SOAP-интерфейсом, используется стандартный запрос AuthRequest, в котором вместо пароля передаются данные предварительной аутентификации по следующему шаблону:
{account-identifier}
{computed-preauth}
Заполним этот шаблон на примере manager@company.ru:
manager@company.ru
93a43cd03a5b2fca40f46c3ce99b4a4dd6e5676a
После этого остается только сформировать ссылку company.ru/CorpPortal/preauth?isredirect=1&authtoken={...} с указанием токена аутентификации, которая перенаправит пользователя на сервер Zimbra, и внедрить её с использованием уже знакомого нам URL-интерфейса.
Ещё одной задачей перед системным администратором, внедряющим предварительную аутентификацию Zimbra на своем корпоративном портале является автоматизация вычисления значения {computed-preauth}. Добиться этого можно при помощи скрипта, который будет автоматически подставлять все требуемые данные и на выходе предоставлять готовую для предварительной аутентификации ссылку. Вот пара примеров таких скриптов:
Python/Django
def webmail_redirect(request):
from time import time
import hmac, hashlib
preauth_key = "9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31"
preauth_url = "http://mail.company.ru/service/preauth"
timestamp = int(time()*1000)
try:
acct = request.user.email
pak = hmac.new(preauth_key, '%s|name|0|%s'%(acct, timestamp), hashlib.sha1).hexdigest()
return HttpResponseRedirect("%s?account=%s&expires=0×tamp=%s&preauth=%s"%(preauth_url, acct, timestamp, pak))
except:
pass
return HttpResponseRedirect("/not_logged_in/")
PHP
<?php
/**
* Глобальные параметры. Могут храниться во внешнем config.inc.php или забираться из базы данных.
*/
$PREAUTH_KEY="9b34da63e5c1cba4cf7eb8262bacb18f712f6abafb02cf670234cb9bca63cb31";
$WEB_MAIL_PREAUTH_URL="http://mail.company.ru/service/preauth";
/**
* Адрес электронной почты пользователя и домен. В этом примере получен из параметра запроса GET.
*/
$user = $_GET["user"];
$domain=$_GET["domain"];
$email = "{$user}@{$domain}";
if(empty($PREAUTH_KEY)) {
die("Need preauth key for domain ".$domain);
}
/**
* Создание токена и URL предварительной аутентификации
*/
$timestamp=time()*1000;
$preauthToken=hash_hmac("sha1",$email."|name|0|".$timestamp,$PREAUTH_KEY);
$preauthURL = $WEB_MAIL_PREAUTH_URL."?account=".$email."&by=name×tamp=".$timestamp."&expires=0&preauth=".$preauthToken;
/**
* Перенаправление на URL предварительной аутентификации Zimbra
*/
header("Location: $preauthURL");
?>
По всем вопросам, связанными c Zextras Suite вы можете обратиться к Представителю компании «Zextras» Екатерине Триандафилиди по электронной почте ekaterina.triandafilidi@zextras.com