===== Двухфакторная авторизация в веб с Indeed IDP ===== //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//. ==== Устанавливаем и настраиваем плагин OpenID Connect login ==== 1. Качаем плагин "OpenID" со страницы CGP: https://communigatepro.ru/plugins#autorization 2. Через веб-интерфейс администратора CGP устанавливаем плагин (в разделе //Users -> Plugins//) и пока оставляем в состоянии //disabled//. 3. У нас ещё нет настроенного модуля //Indeed IDP//, но мы уже можем прописать настройки заранее. Сделаем это. === Authorization Endpoint === https://indeedam.domain.ru/am/idp/connect/authorize === Token Verification Endpoint === https://indeedam.domain.ru/am/idp/connect/token === Client ID === Произвольный, к примеру: communigate === Client Secret === Придумываем какой-либо секретный код, который потребуется указать затем в конфиге //Indeed IDP//. === Support domain aliases === Полезной настройкой также будет: //Support domain aliases//, если мы захотим логиниться в //Indeed// с помощью учётной записи, логин которой не принадлежит основным доменам //CGP//, а принадлежит только алиасам. Пример такого случая: мы логинился в //IDP// через пользователя //AD//, используя //primary email//, но в //CGP// нет такого основного домена (только алиас). В этом случае, если не отметить опцию //Support domain aliases// - получим в //CGP// ошибку, вроде //unknown local domain// после авторизации. 4. Повторяем пункты 1-3 для каждого сервера //CGP//, если у нас их несколько. Пример настроенного плагина. {{:communigate:cgp_oid_plugin.jpg|}} ==== Устанавливаем и настраиваем модуль Indeed IDP ==== 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 Корректная настройка прав на закрытый ключ выглядит примерно так: ;#; {{:cgp:indeedamidppoolcert.jpg|}} ;#; 3. Теперь идем в оснастку управления //IIS -> Default Web Site -> AM -> IDP// и настраиваем корректные методы проверки подлинности для сайта //IDP//. В нем должна быть включена //анонимная проверка подлинности// и отключены остальные. Пример корректной настройки: ;#; {{:cgp:indeedamidpauthsettings.jpg|}} ;#; 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 AM ==== Теперь проверим - какие у нас настройки в консоли управления Indeed. Логинимся в неё: https://indeedam.domain.ru/am/mc/ Сначала убедимся в том, что у нас включены //Indeed Key// и //Windows Password// в глобальных настройках (пункт меню //Конфигурация//), а также любые другие настройки, которым могут быть нам интересны. ;#; {{::indeedkeyenabledglobal.jpg|}} ;#; ;#; {{:cgp:indeedwpenabledglobal.jpg|}} ;#; Теперь в разделе //политики// создадим новую политику для модуля //IDP//. ;#; {{::indeed_idp_app_policy.jpg|}} ;#; :!: Чтобы приложение //IDP// вообще появилось и работало - нам необходимы установленные лицензии на модуль //Identity Provider//. Также добавим в //Область действия// модуля IDP пользователей или группы, которые будем использовать при логине. ;#; {{:cgp:indeedidpusers.jpg|}} ;#; В свойствах поставщика учётных данных //IDP// внутри политики включим нужные нам провайдеры. ;#; {{:cgp:indeedidpprovidersconfig.jpg|}} ;#; ==== Проверка авторизации в CGP ==== Теперь включаем плагин //OpenID Connect login// на каждом сервере //CGP//. Далее заходим в веб-интерфейс CGP и нажимаем //Вход через OpenID Connect//. ;#; {{:cgp:cgpoidcconnectlogin.jpg|}} ;#; Если всё настроено корректно //Indeed// последовательно запросит //UserName// (логин //Windows//, либо email пользователя), пароль и push-подтверждение //Indeed Key//, а затем откроет веб-интерфейс пользователя //CGP//. :!: Email домен и пользователь, который мы используем при входе через //Indeed IDP// должен быть известен //CGP//, т.е. должен существовать основной домен, либо алиас домена + пользователь в этом домене. ;#; {{:cgp:cgp_oidc_indeed_login_username.jpg|}} ;#; ;#; {{:cgp:cgp_oidc_indeed_login_password.jpg|}} ;#; ;#; {{:cgp:cgp_oidc_indeed_login_push_key.jpg|}} ;#; {{tag>CommuniGate Indeed IDP Mail Security}}