Предусловия:
- Установленный и настроенный Indeed AM Identity Provider (8.1.5 и выше) (Indeed Identity Provider | Документация Indeed Access Manager)
- Установленный и настроенный Nextcloud (на работу по https).
- Установленные сертификаты для https подключения на Indeed AM IDP и Nextcloud.
- Выданное DNS имя для:
Nextcloud: nextcloud.indeed-test.com
Примечание: Nextcloud следует разворачивать через Snap. Чтобы у него было доверия к сертификатам, требуется экспортировать доменный сертификат nextcloud, конвертировать его в pem, скопировать его на машину с Nextcloud и активировать https. Путь до хранилища сертификатов: /var/snap/nextcloud/<версия>/certs/live/ Команда активации https: sudo nextcloud.enable-https custom -s cert.pem privkey.pem chain.pem. - cert.pem и chain.pem содержат только сам сертификат; - privkey.pem содержит только закрытый ключ;
Настройка Nextcloud
- Заходим в Приложения, находим и устанавливаем SSO & SAML authentication

- Далее заходим в Параметры сервера - Подтверждение подлинности

- Включаем пункт: "Разрешить использование нескольких пользовательских back-end (например, LDAP)", иначе можно потерять доступ к Nextcloud, в случае ошибки настройки.

-
Добавляем новый провайдер аутентификации:

-
В появившихся полях указываем: UID - имя поля, которое будет обязательным, и чей поиск будет выполняться в ответе от Indeed AM IDP (название может быть произвольным). IndeedAMSAML - название провайдера, которое будет отображаться на странице входа в Nextcloud в виде кнопки (может быть произвольным).

-
Далее указываем параметры Indeed AM IDP:

Указываем сертификат и закрытый ключ в открытом виде (Доменный сертификат для Nextcloud).
Получить его можно с помощью конвертирования сертификата nextcloud через Openssl: openssl x509 -inform DER -in nextcloud.cer -out nextcloud.crt, или экспортировать в открытом виде и открыть текстовым редактором;

urn:indeedid:saml_idp - имя Indeed AM SAML idp (по умолчанию); https://indeedam2.indeed-test.com/am/idp/Account/SsoService - адрес страницы входа для SAML идентификации; https://nextcloud.indeed-test.com - URL адрес страницы Nextcloud; Открытый x509 сертификат IDP - указывается открытый ключ сертификата IDP (сертификат, который генерируется при установке модуля 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.indeed-test.com/index.php/apps/user_saml/saml/metadata
Настройка Indeed Identity Provider
-
Переходим в каталог C:\inetpub\wwwroot\am\idp и открываем конфигурационный файл app-settings.json
-
Добавляем запись вида:
{ "ServiceProvider": "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/metadata", "InLoginFormat": "Name", "OutLoginFormat": "PrincipalName" },

где,
https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/metadata - ссылка на метаданные nextcloud, из прошлого пункта.
-
Далее добавляем запись вида:
{ "ServiceProvider": "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/metadata", "Attributes": [ { "Name": "UID", "UserNameFormat": "PrincipalName" }, { "Name": "Name", "UserNameFormat": "Name" } ] }

-
Далее, в раздел "SAML", добавляем запись вида:
{ "Name": "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/metadata", "Description": "I am Nextcloud, open please", "WantAuthnRequestSigned": true, "SignSamlResponse": true, "SignAssertion": true, "EncryptAssertion": true, "AssertionConsumerServiceUrl": "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/acs", "SingleLogoutServiceUrl": "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/sls", "ValidAssertionConsumerServiceUrls": [ "https://nextcloud.indeed-test.com/index.php/apps/user_saml/saml/acs" ], "PartnerCertificates": [ { "Thumbprint": "757C10B4F7496D62ED5BBE1D206E2EC300B8534C" } ] },

где:
WantAuthnRequestSigned - требование подписи запроса; SignSamlResponse - требование подписи Saml запроса; SignAssertion - требование подписи утверждения; EncryptAssertion - шифрование утверждения; Ссылки используются те же, из Metadata, меняется лишь конечный адрес; Thumbprint - отпечаток доменного сертификата nextcloud; Его можно получить выполнив команду в PS: Get-Childitem Cert:\LocalMachine\My\ | Where-Object {$_.Subject -eq "CN=<имя сертификата>"}; Или посмотреть в оснастке сертификатов:

-
Теперь проверим, что всё работает:

-
При нажатии на “IndeedAMSAML” нас перенаправит на Indeed AM IDP




|