В данном руководстве мы настроим федерацию между двумя инстансами OpenAM. Один инстанс будет Identity Provider (IdP), другой - Service Provider (SP). Таким образом вы можете аутентифицироваться в инстансе OpenAM (SP) используя учетные данные другого инстанса - OpenAM (IdP).
Если у вас уже установлены инстансы OpenAM, можете пропустить этот раздел. Для демонстрационных целей мы установим OpenAM IdP и SP в Docker контейнерах.
Добавьте имена хостов и IP адрес в файл hosts,
127.0.0.1 idp.acme.org sp.mycompany.org
В Windows системах файл hosts находится по адресу C:\Windows\System32\drivers\etc\hosts , в Linux и Mac находится по адресу /etc/hosts
Создайте в Docker сеть для OpenAM
docker network create openam-saml
Запустите образ OpenAM
docker run -h idp.acme.org -p 8080:8080 --network openam-saml --name openam-idp openidentityplatform/openam
После того, как сервер OpenAM запущен, выполните первоначальную настройку, запустив следующую команду и дождитесь окончания настройки.
docker exec -w '/usr/openam/ssoconfiguratortools' openam-idp bash -c \
'echo "ACCEPT_LICENSES=true
SERVER_URL=http://idp.acme.org:8080
DEPLOYMENT_URI=/$OPENAM_PATH
BASE_DIR=$OPENAM_DATA_DIR
locale=en_US
PLATFORM_LOCALE=en_US
AM_ENC_KEY=
ADMIN_PWD=passw0rd
AMLDAPUSERPASSWD=p@passw0rd
COOKIE_DOMAIN=idp.acme.org
ACCEPT_LICENSES=true
DATA_STORE=embedded
DIRECTORY_SSL=SIMPLE
DIRECTORY_SERVER=idp.acme.org
DIRECTORY_PORT=50389
DIRECTORY_ADMIN_PORT=4444
DIRECTORY_JMX_PORT=1689
ROOT_SUFFIX=dc=openam,dc=example,dc=org
DS_DIRMGRDN=cn=Directory Manager
DS_DIRMGRPASSWD=passw0rd" > conf.file && java -jar openam-configurator-tool*.jar --file conf.file'
Запустите образ OpenAM
docker run -h sp.mycompany.org -p 8081:8080 --network openam-saml --name openam-sp openidentityplatform/openam
После того, как сервер OpenAM запущен, выполните первоначальную настройку, запустив следующую команду и дождитесь окончания настройки.
docker exec -w '/usr/openam/ssoconfiguratortools' openam-sp bash -c \
'echo "ACCEPT_LICENSES=true
SERVER_URL=http://sp.mycompany.org:8080
DEPLOYMENT_URI=/$OPENAM_PATH
BASE_DIR=$OPENAM_DATA_DIR
locale=en_US
PLATFORM_LOCALE=en_US
AM_ENC_KEY=
ADMIN_PWD=passw0rd
AMLDAPUSERPASSWD=p@passw0rd
COOKIE_DOMAIN=sp.mycompany.org
ACCEPT_LICENSES=true
DATA_STORE=embedded
DIRECTORY_SSL=SIMPLE
DIRECTORY_SERVER=sp.mycompany.org
DIRECTORY_PORT=50389
DIRECTORY_ADMIN_PORT=4444
DIRECTORY_JMX_PORT=1689
ROOT_SUFFIX=dc=openam,dc=example,dc=org
DS_DIRMGRDN=cn=Directory Manager
DS_DIRMGRPASSWD=passw0rd" > conf.file && java -jar openam-configurator-tool*.jar --file conf.file'
Откройте консоль OpenAM, который будет в роли Identity Provider по адресу http://idp.acme.org:8080/openam . В поле логин введите значение amadmin, в поле пароль введите значение, указанное в настройке ADMIN_PWD , в данном случае passw0rd.
Перейдите в корневой realm и в разделе Dashboard выберите Configure SAMLv2 Provider.

Далее Create Hosted Identity Provider

В настройке Signing Key для демонстрационных целей выберите test , введите значение круга доверия Circle of Trust , оно может быть любым. И добавьте сопоставление атрибутов по атрибуту uid в настройку Attribute Mapping .

Нажмите кнопку Configure , далее OpenAM предложит настроить Remote Service Provider. Так как он у нас еще не настроен, нажмите кнопку Finish
Откройте новую вкладку браузера и откройте консоль OpenAM Service Provider по URL http://sp.mycompany.org:8081/openam . В поле логин введите значение amadmin. В поле пароль введите значение, указанное в настройке ADMIN_PWD , в данном случае passw0rd. Перейдите в корневой realm и в разделе Dashboard выберите Configure SAMLv2 Provider. Далее Create Hosted Service Provider.

Введите имя круга доверия, остальные настройки можете оставить без изменений.

Нажмите кнопку Configure.

Появится предложение настроить remote identity provider. Так как мы уже настроили Identity Provider на предыдущем шаге, то можно нажать Yes . Откроется окно настройки remote identity provider.
Выберите местоположение метаданных identity provider - URL. В поле введите URL метаданных identity provider.
http://idp.acme.org:8080/openam/saml2/jsp/exportmetadata.jsp

Нажмите Configure . Появится сообщение об успешной конфигурации remote identity provider.
Откройте консоль администратора OpenAM SP, в разделе Dashboard в меню слева передите в раздел Applications → SAML 2.0

Откроется окно настройки SAML федерации. Перейдите Entity Providers → http://sp.mycompany.org:8081/openam

В открывшемся окне передите на закладку Assertions Processing . Включите автоматическую федерацию по атрибуту uid.

Нажмите кнопку Save
Перейдите в консоль администратора OpenAM SP. В меню слева перейдите Authentication → Settings . На закладке User Profile выберите значение Ignore . Сохраните изменения.

Передите в консоль администратора OpenAM IdP http://openam-idp.example.org:8080/openam. Откройте корневой realm и в разделе Dashboard выберите Configure SAMLv2 Provider , далее Configure Remote Service Provider

Добавьте URL метаданных service provider http://sp.mycompany.org:8080/openam/saml2/jsp/exportmetadata.jsp . Обратите внимание, что порт OpenAM Service Provider - 8080, т.к. инстансы OpenAM находятся в одной сети OpenAM IdP соединяется с контейнером SP по порту 8080.

Нажмите кнопку Configure появится сообщение об успешном создании remote service provider.
Перейдите в консоль администратора OpenAM IdP, выберите realm, в разделе Dashboard в меню слева выберите Subjects .
Откроется список пользователей. Создайте новую учетную запись testIdp

Выйдете из обеих консолей OpenAM и откройте в браузере ссылку инициализации аутентификации Service Provider. http://sp.mycompany.org:8081/openam/spssoinit?metaAlias=/sp&idpEntityID=http%3A//idp.acme.org%3A8080/openam&RelayState=http%3A//sp.mycompany.org%3A8081/openam
Вас перенаправит на аутентификацию в Identitiy Provider. Введите учетные данные пользователя testIdP

После успешной аутентификации откроется консоль SP с аутентифицированным пользователем testIdP
