Предусловия:
- Установленный и настроенный Indeed SAML IdP (версия 8.0.1 - 8.1.4) (https://confluence.indeed-id.com/display/IAM8D/Indeed+AM+SAML+IDP)
- Установленный и настроенный Nextcloud.
- Установленные сертификаты для https подключения на Indeed SAML IdP и Nextcloud.
- Выданные следующие DNS имена
Nextcloud: NextCloud.iid.local Indeed SAML: dc.iid.local
Примечание: В Nextcloud есть основное уникальное поле пользователя (по умолчанию UID), в данном примере будет использоваться UPN.
Настройка Nextcloud
- Устанавливаем плагин SSO & SAML authentication
- Переходим в настройки - администрирование - SSO & SAML authentication.
- Включаем пункт: "Allow the use of multiple user back-ends (e.g. LDAP)", иначе можно потерять доступ к Nextcloud, в случае ошибки настройки.
-
Добавляем новый провайдер аутентификации:
-
В появившихся полях указываем: UID - имя поля, которое будет обязательным, и чей поиск будет выполняться в ответе от Indeed SAML IdP (название может быть произвольным). IndeedSAMLidP - название провайдера, которое будет отображаться на странице входа в Nextcloud в виде кнопки (может быть произвольным).
-
Далее указываем параметры Indeed SAML Idp:
urn:indeedid:saml_idp - имя Indeed SAML idp (по умолчанию) https://dc.iid.local/iidsamlidp/Account/SsoService - адрес страницы входа для SAML идентификации https://dc.iid.local/iidsamlidp/Account/Logout - страница выхода SAML, если требуется перенаправление на страницу входа Nextcloud, то указываем её (в данном случае это может быть https://nextcloud.iid.local/) Public x509 certificate of the idP - указывается открытый ключ сертификата SAML idP. Получить его можно с помощью конвертирования сертификата SAML через Openssl: openssl x509 -inform DER -in saml.cer -out saml.crt
-
Маппинг атрибутов:
Если требуется, то SAML idP может передать дополнительные параметры для аутентификации пользователя (например, если пользователя еще нет в Nextcloud, то при успешном входе через SAML, эти параметры будут использованы для создания его профиля).
В данном случае мы можем указать UPN имя в email, и передать Name, для маппинга в displayname.
-
Остальные настройки пока оставляем без изменений.
Если Metadata valid, то скачиваем метаданные, и открываем:
Отсюда, для дальнейшей настройки, нам понадобится следующая запись: https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata
Настройка Indeed SAML IdP
-
Переходим в каталог C:\inetpub\wwwroot\am\idp и открываем конфигурационный файл saml.config
-
Добавляем запись вида: <PartnerServiceProvider Name="https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata" WantAuthnRequestSigned="false" SignSAMLResponse="true" SignAssertion="false" EncryptAssertion="false"/>
где,
https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata - ссылка на метаданные nextcloud, из прошлого пункта, SignSAMLResponse="true" - подпись ответа сертификатом.
-
Сохраняем и закрываем файл.
-
Открываем на редактирование файл Web.config
-
Добавляем в тэг <amAuthFormats></amAuthFormats>
новую запись: <amAuthFormat id="https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata" inLoginFormat="Name" outLoginFormat="PrincipalName" />
-
Добавляем также следующий тег: <amAuthCustomAttributes serviceProvider="https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata" > <amAuthCustomAttribute attributeName="UID" userNameFormat="PrincipalName" /> <amAuthCustomAttribute attributeName="Name" userNameFormat="Name" /> </amAuthCustomAttributes>
-
Сохраним изменения.
-
Теперь проверим, что всё работает:
-
При нажатии на “IndeedSAMLidP” нас перенаправит на Indeed SAML
Включение дополнительной проверки подписей и шифрования.
На стороне Indeed Saml idP:
- Переходим в каталог C:\inetpub\wwwroot\am\idp и открываем конфигурационный файл saml.config
<PartnerServiceProvider Name="https://nextcloud.iid.local/index.php/apps/user_saml/saml/metadata" WantAuthnRequestSigned="true" SignSAMLResponse="true" SignAssertion="true" EncryptAssertion="true" CertificateFile="C:\inetpub\wwwroot\iidsamlidp\nextcloud\nextcloudsitecert.crt"/>
где:
WantAuthnRequestSigned - требование подписи запроса SignAssertion - требование подписи утверждения EncryptAssertion - шифрование утверждения CertificateFile - путь к открытому ключу сертификата, которым будет подписывать запросы nextcloud, для самого сертификата требуется указать разрешение на доступ для сервисной учетной записи (в случае ошибки, также можно указать IUSRS)
На стороне Nextcloud:
- Указываем закрытый и открытый ключ сертификата, для подписи и проверки:
Их можно получить с помощью OpenSSL из сертификата pfx для Nextcloud:
#экспорт конечного сертификата без цепочки сертификатов без закрытого ключа openssl.exe pkcs12 -in nextcloud.pfx -clcerts -nokeys -out nextcloud.crt
#экспорт закрытого ключа без открытого openssl.exe pkcs12 -in nextcloud.pfx -nocerts -out nextcloud.pem
После чего можно можно включить дополнительные требования к подписям и шифрованию:
|