CGP поддерживает настройку второго фактора для входа через веб-интерфейс или CommuniGate Desktop клиент. Решение позволяет добавлять какие-либо аунтентификаторы, вроде Google Authenticator, Indeed Key и т.д.
Но что, если нам необходимо интегрировать решение с корпоративным сервером Indeed AM, ключи которого управляются централизованно?
Реализовать это можно через связку: плагин OpenID Connect login (на стороне CGP) + модуль Indeed IDP (на стороне Indeed AM, соответственно). Реализацию данной связки я и опишу по этапам.
В этом варианте настройки авторизация будет происходить так:
1. Indeed IDP запрашивает пароль пользователя (AD)
2. Indeed IDP запрашивает подтверждение Indeed Key
3. Происходит редирект в пользовательский веб-интерфейс CGP.
1. Качаем плагин “OpenID” со страницы CGP: https://communigatepro.ru/plugins#autorization
2. Через веб-интерфейс администратора CGP устанавливаем плагин (в разделе Users → Plugins) и пока оставляем в состоянии disabled.
3. У нас ещё нет настроенного модуля Indeed IDP, но мы уже можем прописать настройки заранее. Сделаем это.
https://indeedam.domain.ru/am/idp/connect/authorize
https://indeedam.domain.ru/am/idp/connect/token
Произвольный, к примеру:
communigate
Придумываем какой-либо секретный код, который потребуется указать затем в конфиге Indeed IDP.
Полезной настройкой также будет: Support domain aliases, если мы захотим логиниться в Indeed с помощью учётной записи, логин которой не принадлежит основным доменам CGP, а принадлежит только алиасам. Пример такого случая: мы логинился в IDP через пользователя AD, используя primary email, но в CGP нет такого основного домена (только алиас). В этом случае, если не отметить опцию Support domain aliases - получим в CGP ошибку, вроде unknown local domain после авторизации.
4. Повторяем пункты 1-3 для каждого сервера CGP, если у нас их несколько.
Пример настроенного плагина.
1. На серверах Indeed AM запускаем установку модуля из дистртибутива:
Indeed AM 8.2.12\Indeed AM IDP\8.2.10\IndeedAM.IDP-v8.2.10-en-us-x64.msi
Если у нас есть работающий сервер Indeed AM с установленным сертификатом, отказываемся в конце установки от предложения сгенерировать новый серверный сертификат для IDP.
2. После установки модуля IDP необходимо выдать права пулу IIS для чтения закрытого ключа сертификата, под которым работают SSL-привязки сайта Indeed AM.
Открываем оснастку управления сертификатами, находим нужный сертификат, далее открываем управление закрытыми ключами и добавляем учётку пула вручную указывая следующую учетную запись (мы не обнаружим её в списках учётных записей):
IIS AppPool\IndeedAM.IDP
Корректная настройка прав на закрытый ключ выглядит примерно так:
3. Теперь идем в оснастку управления IIS → Default Web Site → AM → IDP и настраиваем корректные методы проверки подлинности для сайта IDP.
В нем должна быть включена анонимная проверка подлинности и отключены остальные.
Пример корректной настройки:
4. Время переходить к настройкам модуля IDP. Они находятся в следующем файле:
C:\inetpub\wwwroot\am\idp\app-settings.json
Указываем ссылку на Indeed AM Core, секция:
"AuthenticationServer": {
"Url": "https://indeedam.domain.ru/am/core/",
"IsIgnoreCertErrors": false
},
Если мы хотим последовательно входить по Windows Password + Indeed Key, вычищаем всё лишнее и оставляем ТОЛЬКО такие провайдеры в одном методе (если сделать в разных - при попытке войти будет предоставлен ВЫБОР - какой провайдер использовать, т.е. лишь один фактор). Вся секция AuthenticationMethods с нужными ID провайдеров:
"AuthenticationMethods": [
{
"Name": "IndeedKey",
"Providers": [
"CF189AF5-01C5-469D-A859-A8F2F41ED153",
"DEEF0CB8-AD2F-4B89-964A-B6C7ECA80C68"
]
}
],
Указываем URL Indeed Log Server, вся секция:
"LogServer": {
"AppId": "ea",
"Component": "server",
"EventCache": {
"Directory": "./EventCache",
"SendingIntervalSec": 600
},
"Server": {
"Url": "https://indeedam.domain.ru/ls/api/",
"Certificate": {
"Thumbprint": "",
"FilePath": "",
"FilePassword": ""
}
},
"DetailsSettings": {
"CatalogObjectField": "Name",
"ComputerField": "Ip"
}
},
Правим URL и отпечаток сертификата на нужные в секции SAML:
"SAML": {
"$schema": "https://www.componentspace.com/schemas/saml-config-schema-v1.0.json",
"Configurations": [
{
"LocalIdentityProviderConfiguration": {
"Name": "urn:indeedid:saml_idp",
"SingleSignOnServiceUrl": "https://indeedam.domain.ru/am/idp/Account/SsoService",
"LocalCertificates": [
{
"Thumbprint": "e057b052c98d11f12216e7fda990adca09b387db"
}
]
},
В секции OIDC меняем отпечаток сертификата на нужный:
"OIDC": {
"IDP": {
"CertificateThumbprint": "e057b052c98d11f12216e7fda990adca09b387db"
},
Добавляем НОВОГО клиента в секцию Clients. ClientId должен соответствовать ID клиента, который мы указали выше в настройках плагина CGP. ClientSecret мы тоже указывали в настройках плагина.
RedirectUris и PostLogoutRedirectUris были выяснены опытным путём, их тоже нужно указать. Вся секция нового клиента выглядит так:
{
"ClientId": "communigate",
"ClientSecret": "Secret!!1",
"DisplayName": "CommuniGate Pro",
"Permissions": [
"ept:authorization",
"ept:device",
"ept:introspection",
"ept:logout",
"ept:revocation",
"ept:token",
"gt:authorization_code",
"gt:client_credentials",
"gt:urn:ietf:params:oauth:grant-type:device_code",
"gt:implicit",
"gt:password",
"gt:refresh_token",
"rst:code",
"rst:code id_token",
"rst:code id_token token",
"rst:code token",
"rst:id_token",
"rst:id_token token",
"rst:none",
"rst:token",
"scp:address",
"scp:email",
"scp:phone",
"scp:profile",
"scp:roles",
"scp:openid"
],
"RedirectUris": [
"https://cgp.domain.ru/sys/login-sso-oidc-verify.wcgp"
],
"PostLogoutRedirectUris": [
"https://cgp.domain.ru/"
]
}
После установки настроек перезапустим IIS (Служба веб-публикаций).
Теперь проверим - какие у нас настройки в консоли управления Indeed. Логинимся в неё:
https://indeedam.domain.ru/am/mc/
Сначала убедимся в том, что у нас включены Indeed Key и Windows Password в глобальных настройках (пункт меню Конфигурация), а также любые другие настройки, которым могут быть нам интересны.
Теперь в разделе политики создадим новую политику для модуля IDP.
Чтобы приложение IDP вообще появилось и работало - нам необходимы установленные лицензии на модуль Identity Provider.
Также добавим в Область действия модуля IDP пользователей или группы, которые будем использовать при логине.
В свойствах поставщика учётных данных IDP внутри политики включим нужные нам провайдеры.
Теперь включаем плагин OpenID Connect login на каждом сервере CGP.
Далее заходим в веб-интерфейс CGP и нажимаем Вход через OpenID Connect.
Если всё настроено корректно Indeed последовательно запросит UserName (логин Windows, либо email пользователя), пароль и push-подтверждение Indeed Key, а затем откроет веб-интерфейс пользователя CGP.
Email домен и пользователь, который мы используем при входе через Indeed IDP должен быть известен CGP, т.е. должен существовать основной домен, либо алиас домена + пользователь в этом домене.