Введение
В данном руководстве мы настроим федерацию между двумя инстансами OpenAM по протоколу OAuth2/OIDC. Один инстанс будет являться OAuth2/OIDC сервером (Identity Provider), другой - клиентом (Service Provider). Таким образом, вы можете аутентифицироваться в клиентском инстансе OpenAM (SP) используя учетные данные инстанса OpenAM (IdP) по протоколу OAuth2/OIDC.
Установка инстансов OpenAM
Если у вас уже установлены инстансы 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-oauth
Установка OpenAM IdP
Запустите образ OpenAM
docker run -h idp.acme.org -p 8080:8080 --network openam-oauth --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 SP
Запустите образ OpenAM
docker run -h sp.mycompany.org -p 8081:8080 --network openam-oauth --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'
Настройка OAuth2/OIDC сервера
Откройте консоль OpenAM, который будет в роли OAuth2/OIDC сервера по адресу http://idp.acme.org:8080/openam . В поле логин введите значение amadmin
, в поле пароль введите значение, указанное в настройке ADMIN_PWD
, в данном случае passw0rd
.
Перейдите в корневой realm и в разделе Dashboard выберите Configure OAuth Provider
.

Далее, Configure OpenID Connect
.

Оставьте настройки без изменений и нажмите кнопку Create
.

Создание клиентского приложения
Откройте консоль администратора OAuth2/OIDC сервера, перйдите в нужный realm и в меню слева выберите пункт Applications
→ OAuth 2.0

В открывшемся списке нажмите кнопку New

Заполните поля Name
(client_id) и Password
(client_secret). Повторите пароль и нажмите кнопку Create
.

Откройте созданное приложение из списка и заполните настройки
Настройка | Значение |
---|---|
Redirection URIs | |
Scope | openid |
Token Endpoint Authentication Method | client_secret_post |
ID Token Signing Algorithm | RS256 |
Настройка OAuth2/OIDC клиента
Настройка модуля аутентификации OAuth2/OIDC
Откройте консоль OpenAM, который будет в роли OAuth2/OIDC клиента по адресу http://openam-sp.example.org:8081/openam. В поле логин введите значение amadmin
, в поле пароль введите значение, указанное в настройке ADMIN_PWD
, в данном случае passw0rd
.
Откройте realm и в меню слева выберите Authentication
→ Modules
. Нажмите кнопку Add Module
.

Тип модуля выберите OAuth2/OpenID Connect
, имя модуля может быть любым, путь оно будет oauth
.

Нажмите кнопку Create
.
В списке откройте настройки созданного модуля и заполните настройки:
Настройка | Значение |
---|---|
Client Id | test_client |
Client Secret | Пароль, указанный при регистрации приложения |
Authentication Endpoint URL | |
Access Token Endpoint URL | |
User Profile Service URL | |
Scope | openid |
OAuth2 Access Token Profile Service Parameter name | access_token |
Proxy URL | |
Account Mapper | org.forgerock.openam.authentication.modules.oidc.JwtAttributeMapper |
Account Mapper Configuration | sub=uid |
Attribute Mapper | org.forgerock.openam.authentication.modules.oidc.JwtAttributeMapper |
Attribute Mapper Configuration | sub=uid |
Create account if it does not exist | disabled |
Prompt for password setting and activation code | disabled |
Map to anonymous user | disabled |
OpenID Connect validation configuration type | .well-known/openid-configuration_url |
OpenID Connect validation configuration value | http://idp.acme.org:8080/openam/oauth2/.well-known/openid-configuration |
Name of OpenID Connect ID Token Issuer |
Настройка цепочки аутентификаци OAuth2/OIDC
Откройте консоль администратора OpenAM Service Provider. Выберите realm и в меню слева перейдите Authentication
→ Chains
.

Создайте новую цепочку аутентификации

Нажмите кнопку Add a Module
и добавьте созданный модуль oauth
. Установите Criteria в значение Requisite
. Нажмите OK
и далее Save Changes
.

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

Проверка решения
Перейдите в консоль администратора OpenAM OAuth2/OIDC Server, выберите realm, в разделе Dashboard в меню слева выберите Subjects
.
Откроется список пользователей. Создайте новую учетную запись testIdp

Выйдите из консоли администратора OpenAM OAuth2/OIDC Server и консоли администратора OpenAM OAuth2/OIDC Client или откройте браузер в режиме инкогнито.
Откройте URL аутентификации OAuth2/OIDC Client в цепочке oauth
http://sp.mycompany.org:8081/openam/XUI/?service=oauth
Вас перенаправит на аутентификацию на OAuth2/OIDC Server. Введите учетные данные пользователя testIdP.
Подтвердите согласие на доступ к данным пользователя приложения test_client

После нажатия Allow
откроется консоль OpenAM OAuth2/OIDC Client с учетными данными пользователя OpenAM OAuth2/OIDC Server.
