Аутентификация по протоколу SAML с помощью OpenAM на примере Yandex Cloud
Подготовка
Для настройки SAML аутентификации требуется
- Платформа Docker и запущенный Docker Engine
- Локально запущенный инстанс OpenAM. Для запуска OpenAM выполните команду:
docker run -h openam.example.org -p 8080:8080 --name openam openidentityplatform/openam
Подробное описание установки и первоначальной настройки OpenAM по ссылке
Настройка федерации в OpenAM
Создание и настройка Identity Provider в OpenAM
- Откройте консоль администратора
- Перейдите в нужный realm
- Выберите в разделе Common Tasks Configure SAMLv2 Provider

- Далее Create Hosted Identity Provider

- Выберите ключ для подписи (для демонстрационных целей будем использовать test), введите имя круга доверия а также свяжите атрибуты пользователей Yandex Cloud Organization c OpenAM. Для демонстрационных целей пользователи будут связаны по email.

- Нажмите кнопку Configure.
Настройка связи пользователей OpenAM
- Откройте консоль администратора
- Выберите требуемый realm
- В меню слева выберите раздел Applications и перейдите в SAML 2.0
- В списке Entity Providers выберите провайдера
http://openam.example.org:8080/openam
- На закладке Assertion Content в разделе NameID Format в список NameID Value Map добавьте элемент
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified=mail
- Нажмите Save
Создание пользователей OpenAM
- Откройте консоль администратора
- Выберите требуемый realm
- Создайте пользователя и заполните у него атрибут Email Address
Создание и настройка федерации в Yandex Cloud Organization
- На панели слева выберите раздел Федерации .
- Нажмите кнопку Создать федерацию.
- Задайте имя федерации. Имя должно быть уникальным в каталоге.
- При необходимости добавьте описание.
- В поле Время жизни cookie укажите время, в течение которого браузер не будет требовать у пользователя повторной аутентификации.
- В поле IdP Issuer вставьте ссылку:
http://openam.example.org:8080/openam
- В поле Ссылка на страницу для входа в IdP вставьте ссылку:
http://openam.example.org:8080/openam/SSORedirect/metaAlias/idp
-
Включите опцию Автоматически создавать пользователей, чтобы автоматически добавлять пользователя в организацию после аутентификации. Если опция отключена, федеративных пользователей потребуется добавить вручную.
Автоматически федеративный пользователь создается только при первом входе пользователя в облако. Если вы удалили пользователя из федерации, вернуть его туда можно будет только вручную.
- Включите опцию Принудительная повторная аутентификация (ForceAuthn) в IdP, чтобы задать значение
true для параметра ForceAuthn в запросе аутентификации SAML. При включении этой опции IdP-провайдер запрашивает у пользователя аутентификацию по истечении сессии в Yandex Cloud.
- Нажмите кнопку Создать федерацию.

Добавьте сертификаты
При аутентификации у сервиса Cloud Organization должна быть возможность проверить сертификат IdP-сервера. Для этого добавьте сертификат в федерацию:
- Откройте ссылку OpenAM
http://openam.example.org:8080/openam/saml2/jsp/exportmetadata.jsp
и скопируйте значение тега ds:X509Certificate
- Сохраните сертификат в текстовом файле с расширением
.cer в следующем формате:
----BEGIN CERTIFICATE-----
<значение ds:X509Certificate>
----END CERTIFICATE-----
- На панели слева выберите раздел Федерации .
- Нажмите имя федерации, для которой нужно добавить сертификат.
- Внизу страницы нажмите кнопку Добавить сертификат.
- Введите название и описание сертификата.
- Выберите способ добавления сертификата:
- Чтобы добавить сертификат в виде файла, нажмите Выбрать файл и укажите путь к нему.
- Чтобы вставить скопированное содержимое сертификата, выберите способ Текст и вставьте содержимое.
- Нажмите кнопку Добавить.
Создание и настройка Service Provider в OpenAM
Создайте файл метаданных для OpenAM
Создайте файл metadata.xmlсо следующим содержимым, где ID_федерации - идентификатор федерации из консоли Yandex Cloud Organization, раздела Федерации
<?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://console.cloud.yandex.ru/federations/<ID_федерации>">
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://console.cloud.yandex.ru/federations/<ID_федерации>" index="1"/>
</md:SPSSODescriptor>
</md:EntityDescriptor>
Создание Service Provider в OpenAM
- Откройте консоль администратора
- Перейдите в нужный realm
- Выберите в разделе Common Tasks Configure SAMLv2 Provider
- Далее Configure Remote Service Provider

- В качестве метаданных загрузите созданный на предыдущем этапе файл
metadata.xml
- Выберите существующий Circle Of Trust, созданный на этапе Создание и настройка Identity Provider в OpenAM
- Нажмите Configure
Добавление пользователей в Yandex Cloud Organization
Если при создании федерации вы не включили опцию Автоматически создавать пользователей, федеративных пользователей нужно добавить в организацию вручную.
Для этого вам понадобятся пользовательские Name ID. Их возвращает IdP-сервер вместе с ответом об успешной аутентификации.
При включенной опции Автоматически создавать пользователей в федерацию будут добавляться только пользователи, впервые аутентифицирующиеся в облаке. Повторное добавление федеративного пользователя после его удаления из федерации возможно только вручную.
- Войдите в аккаунт администратора или владельца организации.
- Перейдите в сервис Yandex Cloud Organization.
- На панели слева выберите раздел Пользователи .
- В правом верхнем углу нажмите → Добавить федеративных пользователей.
- Выберите федерацию, из которой необходимо добавить пользователей.
- Введите email адреса пользователей из OpenAM
- Нажмите кнопку Добавить. Пользователи будут подключены к организации.


Проверка аутентификации
Когда вы закончили настройку SSO, протестируйте, что все работает:
- Откройте браузер в гостевом режиме или режиме инкогнито.
-
Перейдите по URL для входа в консоль:
https://console.cloud.yandex.ru/federations/<ID_федерации>
- Учетные данные пользователя OpenAM аутентификации и нажмите кнопку Login.
После успешной аутентификации IdP-сервер перенаправит вас по URL https://console.cloud.yandex.ru/federations/<ID_федерации>, который вы указали файле метаданных для Service Provider в настройках OpenAM, а после — на главную страницу консоли управления. В правом верхнем углу вы сможете увидеть, что вошли в консоль от имени федеративного пользователя.