Содержание
Системные требования:
Требуется сертификат типа wildcard для Корпоративного сервера 2024 приобретённый в центре сертификации (например, Let’s Encrypt, GlobalSign и др.).
1. Подготовка AD FS для настройки SSO
1.1. Проверьте, что ссылка на файл метаданных AD FS доступна публично. Для этого:
- В консоли Диспетчер сервера откройте Tools (Инструменты) -> AD FS Management (Управление AD FS),
- Перейдите в AD FS \ Service \ Endpoints (AD FS \ Служба \ Конечные точки),
- Найдите в таблице строку с типом Federation Metadata (Метаданные федерации). Ссылка на файл метаданных IdP формируется по следующей схеме:
https://{ad-fs-domain}/{path-to-FederationMetadata.xml}
- Можно также воспользоваться следующей командой PowerShell:
(Get-ADFSEndpoint | Where {$_.Protocol -eq "FederationMetadata" -or $_.Protocol -eq "Federation Metadata"}).FullUrl.ToString()
- В результате вы должны получить ссылку следующего вида:
https://testad.devr7.ru/FederationMetadata/2007-06/FederationMetadata.xml
- Для проверки, что AD FS стартовал корректно, перейдите в браузере по ссылке, полученной ранее. Должна скачаться/отобразится xml. Скопируйте ссылку на xml-файл метаданных: она потребуется на следующем шаге.
1.2. Проверьте/включите проверку подлинности с помощью форм
- Для работы SSO из интранета потребуется включить опцию Forms Authentication (Проверка подлинности с помощью форм) в окне Edit Global Authentication Policy (Изменить глобальную политику проверки подлинности), вызываемом через контекстное меню AD FS / Authentication Policies (AD FS / Политики проверки подлинности),
1.3. Включение поддержки протокола TLS 1.2
1.3.1. Для того чтобы добавить AD FS в IdP в Microsoft Active Directory Federation Service на сервере Microsoft Windows Server 2019 или ниже необходимо включить поддержку протокола TLS 1.2
- Запустите Windows PowerShell с параметром «Запуск от имени администратора».
- Выполните следующие команды, чтобы включить TLS2 на клиенте ADFS:
New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client’ -Force New-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client’ -name ‘Enabled’ -value ‘1’ –PropertyType ‘DWORD’ New-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client’ -name ‘DisabledByDefault’ -value ‘0’ –PropertyType ‘DWORD’
1.3.2. Затем выполните следующую команду, чтобы включить строгую аутентификацию:
New-ItemProperty -path ‘HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319’ -name ‘SchUseStrongCrypto’ -value ‘1’ -PropertyType ‘DWord’
1.3.3. (Опционально) Выполните следующие команды, чтобы отключить SSL0 на клиенте ADFS:
New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client’ -Force | Out-Null New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\ Protocols\SSL 3.0\Client’ -name ‘Enabled’ -value ‘0’ -PropertyType ‘DWord’ -Force | Out-Null New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\ Protocols\SSL 3.0\Client’ -name ‘DisabledByDefault’ -value 1 -PropertyType ‘DWord’ -Force | Out-Null
- Закройте все окна управления сервером ADFS.
2. Настройка Р7-Диск SP
2.1. Включаем SSO аутентификацию
- Открываем файл /opt/r7-office/Api/appsettings.json
nano /opt/r7-office/Api/appsettings.json
- Меняем значение «esiaType»
"esiaType": "saml2",
Если параметр «esiaType» отсутствует, то вы можете добавить его самостоятельно.
2.2. Настраиваем R7.Sso.Api.Host
Создайте единый сертификат для работы службы синхронизации в формате .pfx
Важно! Не задавайте пароль для сертификата .pfx. Оставьте поле пароля пустым.
Для его создания необходимо наличие закрытого ключа и сертификата.
Для создания такого сертификата выполните команду
openssl pkcs12 -export -in "devr7.ru.crt" -inkey "devr7.ru.key" -out "devr7.ru.pfx"
Где,
- export указывает на экспорт сертификата в формат PFX.
- in «devr7.ru.crt» указывает путь к файлу сертификата.
- inkey «devr7.ru.key» указывает путь к файлу с закрытым ключом.
- out «devr7.ru.pfx» задает имя файла, в который будет сохранен PFX сертификат.
Разместите сертификат в директории /opt/r7-office/Sso.Api/ и предоставьте на него права 755
В качестве SP сервера выступает R7.Sso.Api.Host
- Открываем файл /opt/r7-office/Sso.Api/appsettings.json
nano /opt/r7-office/Sso.Api/appsettings.json { "AllowedHosts": "*", "Sso": { "Host": "http://+:38034" }, "Saml2": { "IdPMetadata": "https://testad.devr7.ru/FederationMetadata/2007-06/FederationMetadata.xml", "Issuer": "https://cddisk-ldp.devr7.ru/saml2/Metadata", "SignatureAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", "SigningCertificateFile": "devr7.ru.pfx", "SigningCertificatePassword": "", "CertificateValidationMode": "None", "RevocationMode": "NoCheck" } }
- В блоке «Saml2» редактируем:
- IdPMetadata — указываем ссылку на конфигурацию IdP сервера (шаг 1.1)
- Issuer — редактируем ссылку на метаданные SP сервера по следующей схеме («https://{r7disk-domain}/saml2/Metadata»)
- SigningCertificateFile — указываем имя .pfx сертификата для подписи сообщений
- SigningCertificatePassword — указываем пароль на .pfx сертификат (если на сертификате установлен пароль)
Перезапустите службы командой:
supervisorctl restart all
3. Настройка AD FS IdP
3.1. Добавляем отношение доверия проверяющей стороны
- В консоли Диспетчер сервера откройте Tools (Инструменты) -> AD FS Management (Управление AD FS),
- В панели управления AD FS выберите Relying Party Trusts (Отношения доверия проверяющей стороны). Выберите команду Add Relying Party Trust… (Добавить отношение доверия проверяющей стороны…) справа.
- Откроется Мастер добавления отношений доверия проверяющей стороны,
- В окне мастера выберите переключатель Import data about the relying party published online or on a local network (Импорт данных о проверяющей стороне, опубликованных в Интернете или локальной сети), вставьте отредактированную ранее ссылку на файл метаданных Р7-Диск SP (шаг 2.2) в поле Federation metadata address (host name or URL) (Адрес метаданных федерации (имя узла или URL-адрес)) и нажмите кнопку Next (Далее),
- В поле Display name (Отображаемое имя) укажите любое имя и нажмите кнопку Next (Далее),
- Выберите опцию I do not want to configure multi-factor authentication settings for this relying party trust at this time (Сейчас не настраивать параметры для этого отношения доверия с проверяющей стороной) и нажмите кнопку Next (Далее),
- Выберите опцию Permit all users to access this relying party (Разрешить доступ к этой проверяющей стороне всем пользователям) и нажмите кнопку Next (Далее),
- Проверьте полученные настройки и нажмите кнопку Next (Далее),
- Оставьте опцию, выбранную по умолчанию, без изменений и нажмите кнопку Close (Закрыть),
3.2. Добавляем правила преобразования выдачи
Откроется новое окно. На вкладке Issuance Transform Rules (Правила преобразования выдачи) нажмите кнопку Add Rule… (Добавить правило…),
3.2.1. Добавляем отправку атрибутов LDAP как утверждений
- Выберите опцию Send LDAP Attributes as Claims (Отправка атрибутов LDAP как утверждений) из списка Claim rule template (Шаблон правила утверждения) и нажмите кнопку Next (Далее),
- Напишите любое имя в поле Claim rule name (Имя правила утверждения). Выберите опцию Active Directory из списка Attribute store (Хранилище атрибутов) и заполните форму Mapping of LDAP attributes to outgoing claim types (Сопоставление атрибутов LDAP типам исходящих утверждений) согласно приведенной ниже таблице. Когда все будет готово, нажмите кнопку Finish (Завершить).
Где:
LDAP ATTRIBUTE (АТРИБУТ LDAP) | OUTGOING CLAIM TYPE (ТИП ИСХОДЯЩЕГО УТВЕРЖДЕНИЯ) |
Given-Name | givenname[0] |
Surname | sn |
E-Mail-Addresses |
3.2.2. Добавляем преобразование входящего утверждения
- В окне Edit Claim Rules (Изменить правила утверждений) снова нажимите кнопку Add Rule… (Добавить правило…), выберите опцию Transform an Incoming Claim (Преобразование входящего утверждения) из списка Claim rule template (Шаблон правила утверждения) и нажмите кнопку Next (Далее),
- Напишите любое имя в поле Claim rule name (Имя правила утверждения) и выберите следующие параметры из списков:
Где:
- Incoming claim type (Тип входящего утверждения): mail,
- Outgoing claim type (Тип исходящего утверждения): Name ID,
- Outgoing name ID format (Формат ИД исходящего имени): Email
- Когда все будет готово, нажмите кнопку Finish (Завершить).
3.2.3. Добавляем настраиваемое правило утверждения
- Для корректной работы logout из AD FS, необходимо добавить Custom Claim Rule (настраиваемое правило утверждения), где {r7disk-domain} нужно заменить на домен своего Р7-Диска SP, а {ad-fs-domain} заменить на домен IdP:
c:[Type == "mail"] => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/namequalifier"] = "http://{ad-fs-domain}/adfs/services/trust", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/spnamequalifier"] = "https://{r7disk-domain}/sso/metadata");
- Нажмите кнопку OK,
3.2.4. Проверяем вкладку правила преобразования выдачи
- Должно получиться примерно так:
4. Проверка работы Р7-Диск SP и AD FS IdP
- Вход в Р7-Диск на стороне SP
- Перейдите на страницу аутентификации Р7-Диск (например, https://admin.devr7.ru/)
- Нажмите на кнопку «Войти через ССО». Если этой кнопки нет, то SSO не включен.
- Если всё настроено верно в SP и IdP, мы будем перенаправлены на форму логина в AD FS IdP.
- Введите логин и пароль учетной записи в AD FS IdP и нажмите кнопку «Вход».
- Если учетные данные указаны правильно, мы будем перенаправлены на страницу модуля Р7-Диск (пользователь должен быть синхронизирован по LDAP заранее, до настройки SSO).
Обратите внимание, что при внесении каких-либо изменений в разделе «Relying Party Trusts» в AD FS обходимо выполнять обновление этих данных нажатием на «Update from Federation Metadata»