Использование KeyCloak в качестве IDP и Key Manager для WSO2 API Manager

В этом блоге мы рассмотрим как настроить Keycloack 9.0 как внешний IDP для WSO2 APIM 3.1. Кроме этого будет показано как настроить Keycloak в качестве Key Manager. 

Установка

1. Скачайте и распакуйте Keycloak standalone server по ссылке.

2. Скачайте и установите WSO2 API Manager 3.1.0 по ссылке.

Настройка Keycloak server

1. Добавьте в файл <KeycloakServer>/bin/standalone.sh следующий параметр

SERVER_OPTS="-Dkeycloak.profile.feature.upload_scripts=enabled"

2. В файлах <KeycloakServer>/standalone/configuration/standalone.xml и <KeycloakServer>/standalone/configuration/standalone-ha.xml добавьте параметр proxy-address-forwarding="true" в раздел указанный ниже

            <server name="default-server">
                <http-listener name="default" proxy-address-forwarding="true" socket-binding="http" redirect-socket="https" enable-http2="true"/>

3. Создайте пользователя admin запустив скрипт  <KeycloakServer>/bin/add-user-keycloak.sh -u admin

4. Перейдите в каталог <KeycloakServer>/bin и запустите сервер командой 

standalone.sh -b 0.0.0.0

Сервер запустится и будет слушать порт 8080 и 8443

5. Войдите в систему

6. Создайте новый realm с именем "apim" нажав на кнопку "Add realm" в выпадающем меню

7. Создайте нового клиента oidc-km

8. После нажатия кнопки Save произведите настройки как на изображении ниже

9. После установки Access Type в "confidential" появится вкладка "Credentials"
В этой вкладке есть поле "Secret". Скопируйте его для дальнейшего использования.

10. Перейдите в закладку Roles и создайте роль any

11. На закладке Mappers создайте RoleMapper

12. Там же создайте script mapper "UserNameInSub" для правильной работы JIT Provisioning

13. Создайте пользователя emma

14. Установите пароль

15. Настройте Role Mapping

Настройка WSO2 API Manager 3.1.0

Мы настроим Federated Identity Provider в APIM 3.1.0 для аутентификации OpenID-connect в Keycloak
1. Войдите в carbon панель в APIM и создайте новый Identity Provider с именем Keycloak и следующими параметрами (обратите внимание на url Keycloak - localhost в случае локальной установки)

Client Id: oidc-km

Authorization Endpoint URL: https://keycloak.demo1.emdev.ru/auth/realms/apim/protocol/openid-connect/auth

Token Endpoint URL: https://keycloak.demo1.emdev.ru/auth/realms/apim/protocol/openid-connect/token

Callback URL: https://wso2apim31.demo1.emdev.ru/commonauth

Userinfo Endpoint URL: https://keycloak.demo1.emdev.ru/auth/realms/apim/protocol/openid-connect/userinfo

Logout Endpoint URL: https://keycloak.demo1.emdev.ru/auth/realms/apim/protocol/openid-connect/logout

2. Далее перейдите в раздел Just-in-Time Provisioning

3. В разделе Claim Configuration произведите следующие настройки

4. Далее настройте Role Mapping

5. Обновите настройки Service Providers

Нажмите редактировать apim_devportal и внесите следующие изменения:

То же самое проделайте для apim_publisher

6. Теперь можно попробовать зайти в publisher/dev порталы с помощью пользователя созданного в Keycloak

Настройка Keycloak как Key Manager для WSO API Manager 3.1.0

1. Внесите следующие настройки в <API-M_HOME>/repository/conf/deployment.toml

[apim.key_manager]
key_manager_client_impl = "org.wso2.keycloak.client.KeycloakClient"

[apim.key_manager.configuration]
keycloakInstanceUrl = "https://keycloak.demo1.emdev.ru"
keycloakRealmName = "apim"
client_id = "api-client"
username = "apim-user"
password = "xxxxxxxx"

[[apim.jwt.issuer]]
name = "https://keycloak.demo1.emdev.ru/auth/realms/apim"

[apim.jwt.issuer.jwks]
url = "https://keycloak.demo1.emdev.ru/auth/realms/apim/protocol/openid-connect/certs"

2. Сохраните файл из https://github.com/wso2-extensions/apim-keymanager-keycloak и разместите в папке <API-M_HOME>/repository/components/lib

3. В keycloak создайте клиента с настройками по умолчанию и именем api-client

4. Создайте пользователя "apim-user" и установите пароль как в конфигурации для APIM

5. Перейдите на закладку Role Mapping и настройте роли как на изображении

6. Перезапустите API Manager и зайдите в Developer Portal для проверки ключей.
Создайте новое приложение

7. Сгенерируйте новый токен оставив только галочки поддерживаемых grant-type

 

Полезные ссылки:

https://medium.com/@himashaguruge/using-keycloak-as-an-external-idp-with-wso2-api-manager-3-1-0-7f7a3a637526

https://medium.com/wso2-learning/understanding-wso2-api-manager-3rd-party-key-manager-integration-77a3677b1e9a

 

01.06.2020