===== Двухфакторная авторизация в веб с 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}}