Содержание
Введение
Технология единого входа (англ. Single Sign-On или SSO) — технология, которая позволяет пользователям осуществлять вход в систему только один раз, а затем получать доступ ко множеству приложений/сервисов без повторной аутентификации.
SSO — это всегда совместная работа двух приложений: поставщика учетных записей (англ. Identity Provider, далее по тексту сокращенно «IdP») и поставщика сервиса (англ. Service Provider, далее по тексту сокращенно «SP»). Р7-Офис SSO реализует только SP. В качестве IdP может выступать множество различных провайдеров, но в этой статье мы рассмотрим реализацию Active Directory Federation Services (AD FS).
Системные требования
Системные требования включают в себя следующее программное обеспечение, которое было протестировано и корректно работает с Р7-Офис SSO:
- Windows Server 2008 R2, Windows Server 2016;
- AD FS версии 3.0 или более поздней версии.
Подготовка Р7-Офис для настройки SSO
- Установите версию Р7-Офис. Корпоративный сервер с поддержкой SSO.
- Привяжите доменное имя, например, myportal-address.com.
- На портале перейдите в Панель управления -> HTTPS, создайте и примените сертификат letsencrypt для шифрования трафика (для включения HTTPS на портале).
Подготовка AD FS для настройки SSO
- Установите последнюю версию AD DS (Active Directory Domain Service) со всеми официальными обновлениями и исправлениями.
- Установите последнюю версию AD FS со всеми официальными обновлениями и исправлениями.
- Проверьте, что ссылка на файл метаданных 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:
PS C:\Users\Administrator> (Get-ADFSEndpoint | Where {$_.Protocol -eq "FederationMetadata" -or $_.Protocol -eq "Federation Metadata"}).FullUrl.ToString()
В результате вы должны получить ссылку следующего вида:
https://r7-officevm.northeurope.cloudapp.azure.com/FederationMetadata/2007-06/FederationMetadata.xml
- Для проверки, что AD FS стартовал корректно, перейдите в браузере по ссылке, полученной ранее. Должна скачаться/отобразится xml. Скопируйте ссылку на xml-файл метаданных: она потребуется на следующем шаге.
Настройка Р7-Офис SP
- Убедитесь, что вы зашли в качестве администратора в Панель управления Р7-Офис, и щелкните вкладку SSO.Примечание: Вы можете зарегистрировать только одного корпоративного поставщика учетных записей для вашей организации на портале Р7-Офис.
- Включите SSO, используя переключатель Включить аутентификацию с помощью технологии единого входа. Ссылку, скопированную из AD FS, вставьте в поле URL-адрес XML-файла метаданных IdP.Нажмите кнопку со стрелкой вверх, чтобы загрузить метаданные IdP. Форма Настройки поставщика сервиса Р7-Офис будет автоматически заполнена данными из AD FS IdP.
- В поле Пользовательская надпись для кнопки входа вы можете ввести любой текст вместо стандартного «Single Sign-on«. Этот текст будет отображаться на кнопке для входа с помощью сервиса Single Sign-on на странице аутентификации портала Р7-Офис.
- В селекторе Формат NameID выберите следующее значение: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress.
- В разделе Открытые сертификаты поставщика учетных записей \ Дополнительные параметры уберите галочку Проверять подпись ответов выхода, так как AD FS не требует этого по умолчанию.
- Теперь необходимо добавить сертификаты в раздел Сертификаты поставщика сервиса. Можно сгенерировать самоподписанные сертификаты или добавить любые другие.Примечание: в окне Новый сертификат переключите селектор Использовать для на signing and encrypt, так как AD FS IdP автоматически настроен на проверку цифровой подписи и шифрование данных.
Должно получиться примерно так:
- В разделе Сертификаты поставщика сервиса \ Дополнительные параметры, уберите галочку Подписывать ответы выхода, так как AD FS не требует этого по умолчанию.Примечание: Форму с заголовком Сопоставление атрибутов настраивать не нужно, так как эти параметры мы настоим в AD FS IdP позже.
- Нажмите кнопку Сохранить. Должен открыться раздел Метаданные поставщика сервиса Р7-Офис.Проверьте, что настройки доступны публично, кликнув по кнопке СКАЧАТЬ XML-ФАЙЛ МЕТАДАННЫХ ПОСТАВЩИКА СЕРВИСА. Должно отобразиться содержимое XML-файла.
- Скопируйте ссылку на файл метаданных Р7-Офис SP из поля Идентификатор сущности поставщика сервиса (ссылка на XML-файл метаданных) и перейдите на машину, где установлен AD FS.
Настройка AD FS IdP
- В консоли Диспетчер сервера откройте Tools (Инструменты) -> AD FS Management (Управление AD FS),
- В панели управления AD FS выберите Trust Relationships > Relying Party Trusts (Отношения доверия -> Отношения доверия проверяющей стороны). Выберите команду Add Relying Party Trust… (Добавить отношение доверия проверяющей стороны…) справа. Откроется Мастер добавления отношений доверия проверяющей стороны,
Для того чтобы добавить AD FS в IdP в Microsoft Active Directory Federation Service на сервере Microsoft Windows Server 2012 R2 или ниже необходимо включить поддержку протокола TLS 1.2
Для этого воспользуйтесь инструкцией:
Пререквизиты:
- Версия .NET Framework, установленная на сервере ADFS, должна быть выше 4.6.2:
- Проверка версии .NET Framework
- Загрузки .NET Framework
- Версия Windows Server 2012 Hardware Abstraction Layer (HAL) должна быть не ниже 6.3.9600.17031.
Инструкция
- Запустите 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’
Информационное сообщение Write-Host «TLS 1.2 включен».
- Затем выполните следующую команду, чтобы включить строгую аутентификацию:
New-ItemProperty -path ‘HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319’ -name ‘SchUseStrongCrypto’ -value ‘1’ -PropertyType ‘DWord’
- (Необязательно) Выполните следующие команды, чтобы отключить 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
Информационное сообщение Write-Host «SSL 3.0 отключен».
- Закройте все окна управления сервером ADFS.
- Версия .NET Framework, установленная на сервере ADFS, должна быть выше 4.6.2:
- В окне мастера выберите переключатель Import data about the relying party published online or on a local network (Импорт данных о проверяющей стороне, опубликованных в Интернете или локальной сети), вставьте скопированную ранее ссылку на файл метаданных Р7-Офис SP в поле 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 (Закрыть),
- Откроется новое окно. На вкладке Issuance Transform Rules (Правила преобразования выдачи) нажмите кнопку Add Rule… (Добавить правило…),
- Выберите опцию 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 Surname sn E-Mail-Addresses mail Telephone-Number mobile Title title physicalDeliveryOfficeName l - В окне 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 (Завершить).
Должно получиться примерно так:
Если не будет работать logout из AD FS, то стоит добавить Custom Claim Rule (настраиваемое правило утверждения), где
{portal-domain}
нужно заменить на домен своего 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://{portal-domain}/sso/metadata");
- Нажмите кнопку OK,
- Для работы SSO из интранета потребуется включить опцию Forms Authentication (Проверка подлинности с помощью форм) в окне Edit Global Authentication Policy (Изменить глобальную политику проверки подлинности), вызываемом через контекстное меню AD FS / Authentication Policies (AD FS / Политики проверки подлинности),
- Откройте свойства созданной проверяющей стороны и перейдите на вкладку Advanced (Дополнительные параметры),
Выберите опцию SHA-1 в списке Secure hash algorithm (Алгоритм SHA).
Проверка работы Р7-Офис SP и AD FS IdP
Вход в Р7-Офис на стороне SP
- Перейдите на страницу аутентификации Р7-Офис (например, https://myportal-address.com/auth.aspx).
- Нажмите на кнопку Single sign-on (название кнопки может отличаться, если вы указали свой вариант при настройке Р7-Офис SP). Если этой кнопки нет, то SSO не включен.
- Если всё настроено верно в SP и IdP, мы будем перенаправлены на форму логина в AD FS IdP.
- Введите логин и пароль учетной записи в AD FS IdP и нажмите кнопку Sign in.
- Если учетные данные указаны правильно, мы будем перенаправлены на главную страницу портала (если такого пользователя нет на портале, он будет создан автоматически, а если данные были изменены в IdP, они будут обновлены).
Профили пользователей, добавленных с помощью SSO-аутентификации
Возможность редактирования профилей пользователей, созданных с помощью SSO-аутентификации, ограничена. Поля профиля пользователя, полученные из IdP, заблокированы для редактирования (а именно: Имя
, Фамилия
, Email
, Позиция
и Местоположение
). Эти поля можно отредактировать только из вашей учетной записи в IdP.
Пользователи, созданные с помощью SSO-аутентификации, отмечены в списке пользователей значком SSO для администраторов портала.