Введение
В данном руководстве мы настроим федерацию между двумя инстансами 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
.
![](https://habrastorage.org/getpro/habr/upload_files/5c7/522/612/5c7522612f14e799377c379fa2a9f2d0.png)
Далее, Configure OpenID Connect
.
![](https://habrastorage.org/getpro/habr/upload_files/a36/773/0f9/a367730f9b62e131bfb05daae7cbf5f4.png)
Оставьте настройки без изменений и нажмите кнопку Create
.
![](https://habrastorage.org/getpro/habr/upload_files/917/a4e/971/917a4e97188b84f3598f7a0b68f4ba81.png)
Создание клиентского приложения
Откройте консоль администратора OAuth2/OIDC сервера, перйдите в нужный realm и в меню слева выберите пункт Applications
→ OAuth 2.0
![](https://habrastorage.org/getpro/habr/upload_files/edb/16d/302/edb16d3029901bbf5aefb93d7d42472d.png)
В открывшемся списке нажмите кнопку New
![](https://habrastorage.org/getpro/habr/upload_files/dc8/9a7/d06/dc89a7d06edba888eb6c544344db09ec.png)
Заполните поля Name
(client_id) и Password
(client_secret). Повторите пароль и нажмите кнопку Create
.
![](https://habrastorage.org/getpro/habr/upload_files/605/ed5/8ed/605ed58edadfce767c365eb336bc5f21.png)
Откройте созданное приложение из списка и заполните настройки
Настройка |
Значение |
---|---|
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
.
![](https://habrastorage.org/getpro/habr/upload_files/6cf/c7c/a1a/6cfc7ca1a2fa4b475770b492d701a954.png)
Тип модуля выберите OAuth2/OpenID Connect
, имя модуля может быть любым, путь оно будет oauth
.
![](https://habrastorage.org/getpro/habr/upload_files/291/8a3/73e/2918a373ec21755165cc7d61ef17e200.png)
Нажмите кнопку 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
.
![](https://habrastorage.org/getpro/habr/upload_files/926/f45/c0c/926f45c0cd504b5411de1945e552dc92.png)
Создайте новую цепочку аутентификации
![](https://habrastorage.org/getpro/habr/upload_files/4f1/e52/a72/4f1e52a721c7816eea1ddac772054190.png)
Нажмите кнопку Add a Module
и добавьте созданный модуль oauth
. Установите Criteria в значение Requisite
. Нажмите OK
и далее Save Changes
.
![](https://habrastorage.org/getpro/habr/upload_files/076/b32/529/076b32529b796651afd73bb3c8cc6dda.png)
Настройка Realm
Перейдите в консоль администратора OpenAM SP. В меню слева перейдите Authentication
→ Settings
. На закладке User Profile
выберите значение Ignore
. Сохраните изменения.
![](https://habrastorage.org/getpro/habr/upload_files/0d0/240/69e/0d024069e99c41fcd32cc43ab05bbd2a.png)
Проверка решения
Перейдите в консоль администратора OpenAM OAuth2/OIDC Server, выберите realm, в разделе Dashboard в меню слева выберите Subjects
.
Откроется список пользователей. Создайте новую учетную запись testIdp
![](https://habrastorage.org/getpro/habr/upload_files/7f8/e80/1dc/7f8e801dc1e88916ea93af7dd1914314.png)
Выйдите из консоли администратора 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
![](https://habrastorage.org/getpro/habr/upload_files/af5/e0e/913/af5e0e9134be79daee23fa273b553b50.png)
После нажатия Allow
откроется консоль OpenAM OAuth2/OIDC Client с учетными данными пользователя OpenAM OAuth2/OIDC Server.
![](https://habrastorage.org/getpro/habr/upload_files/fd5/9da/b3c/fd59dab3c8079519eadfe25edd5aced5.png)