Руководство: настройка объединенного потока единого входа OpenID Connect между API Manager и Gluu Server

Всем привет !!! 👋

В этой среде я расскажу, как объединить и настроить поток SSO OpenID Connect между WSO2 API Manager и Gluu Identity Server.

Я буду использовать WSO2 API Manager v2.6 с WSO2 Identity Server as Key Manager v5.7 и Gluu Server v3.1.7 и выполнять единый вход для узла магазина API

Надеюсь, вам это понравится и вы сочтете это полезным 🙌

Сервер идентификации Gluu

Быстрая установка и запуск

Начнем демонстрацию с установки Gluu Identity Server. Вы можете обратиться здесь для быстрой установки на Google Cloud Platform.

Ниже приведены команды, выполняемые для установки и настройки сервера Gluu в приведенном выше справочнике…

# add the sources
echo "deb https://repo.gluu.org/ubuntu/ xenial main" > /etc/apt/sources.list.d/gluu-repo.list
# download key
curl https://repo.gluu.org/ubuntu/gluu-apt.key | apt-key add -
# udpate the existing packages
apt-get update
# install gluu-server 3.1.7
apt-get install gluu-server-3.1.7
# start the gluu-server
service gluu-server-3.1.7 start
# login to the gluu-server
service gluu-server-3.1.7 login
# execute the following to setup the gluu-server
cd /install/community-edition-setup/
./setup.py

✋ Конфигурации и метаданные OpenID Connect

После того, как установка будет завершена и сервер будет запущен и работает должным образом, войдите в консоль управления Gluu, используя учетные данные администратора.

Щелкните раздел Конфигурация на панели навигации и выберите Конфигурации JSON, чтобы вывести список всех необходимых конфигураций и метаданных сервера Gluu.

На следующем экране перейдите на вкладку Конфигурация oxAuth и прокрутите вниз или найдите legacyIdTokenClaims. Измените конфигурацию на true. Это необходимо для того, чтобы сервер идентификации Gluu мог передавать запрошенные утверждения и информацию через токены идентификатора.

Прокрутите вверх и отметьте следующие конечные точки. При настройке серверов WSO2 нам понадобятся следующие URI конечных точек.

  • authorizationEndpoint: будет выглядеть как <host>/oxauth/restv1/authorize
  • tokenEndpoint: будет выглядеть как <host>/oxauth/restv1/token
  • userInfoEndpoint: будет выглядеть как <host>/oxauth/restv1/userinfo

Сделав заметки, нажмите Сертификаты в разделе Конфигурации, загрузите сертификат подписи IDP и сохраните его.

✋ Регистрация клиента OpenID Connect

Затем мы настроим клиента OpenID Connect на сервере идентификации Gluu для связи и выполнения потока единого входа с серверами WSO2.

Разверните раздел OpenID Connect на левой панели навигации и выберите Клиенты, чтобы вывести их список и создать новых клиентов.

Нажмите Добавить клиента и на следующем экране введите следующее

  • Секрет клиента: Нажмите Создать секрет клиента, чтобы его создать
  • Имя клиента: WSO2ISKM
  • URI для перенаправления входа: https://localhost:9444/commonauth
  • Области применения: openid & profile
  • Типы ответов: code token & id_token
  • Типы грантов: authorization_code & password

и Добавить.

Затем перейдите на вкладку Дополнительные настройки нашего клиента OpenID Connect и включите параметр Включить утверждения в токен идентификатора, выбрав true в раскрывающемся списке.

Обратите внимание, что вам необходимо включить legacyIdTokenClaims в конфигурации JSON сервера Gluu, чтобы внести изменения в свойство Включить утверждения в токен идентификатора в Расширенные настройки

и Обновить

Щелкните Сводка конфигурации клиента вверху, скопируйте и сохраните идентификатор клиента и секрет нашего WSO2ISKM клиента OpenID Connect.

✋ Регистрация пользователя

Затем нажмите на раздел Пользователи и Добавить человека, чтобы зарегистрировать нового пользователя для этой демонстрации.

Добавьте следующее

  • Имя пользователя: gluuuser
  • Имя: Gluu
  • Отображаемое имя: UserGluu
  • Фамилия: User
  • Электронная почта: [email protected]
  • Пароль: любые предпочтительные пароли для вашего пользователя 😃
  • Статус пользователя: Active

выберите и включите поля Предпочтительное имя пользователя и Организация из списка, отображаемого слева.

  • Предпочтительное имя пользователя: gluuuser (то же, что и имя пользователя)
  • Организация: Subscriber (для демонстрации единого входа с помощью узла хранилища диспетчера API)

и Добавить.

✋ Объем и конфигурации претензий

Мы почти закончили настройку сервера Gluu. В качестве последнего шага на сервере Gluu перейдите к OpenID Connect и выберите Области.

Откройте область профиля и нажмите «Добавить утверждение» и включите следующие утверждения вместе с существующими.

  • Preferred Username
  • Organization

В демонстрационных целях я настроил и включил все необходимые претензии в доступные области. Лучше всего попробовать создать новую область и включить в нее все дополнительные необходимые утверждения. Если это так, то мы должны включить вновь созданную область в наш клиент OpenID Connect на сервере Gluu для обслуживания токенов.

Сервер идентификации WSO2 в качестве диспетчера ключей

Мы закончили с конфигурациями Gluu. Наша следующая остановка - сервер идентификации WSO2 в качестве диспетчера ключей.

В этой демонстрации я буду использовать WSO2 API Manager 2.6 и WSO2 Identity Server в качестве Key Manager 5.7. Вы можете обратиться здесь, чтобы настроить IS-KM в своей среде.

В качестве бонуса вы можете использовать Hydrogen (устаревшую версию можно найти здесь) для настройки среды за считанные минуты.

✋ Конфигурации поставщика удостоверений

Давайте начнем путешествие 🚀 с настройки поставщика удостоверений для объединения с сервером Gluu.

Запустите сервер IS-KM и войдите в консоль Carbon Management. Выберите Добавить в разделе Поставщики удостоверений, чтобы зарегистрировать поставщика удостоверений.

На следующем экране добавьте следующие

  • Имя поставщика удостоверений: GluuIDP
  • Отображаемое имя: Gluu Identity Provider
  • Публичный сертификат поставщика удостоверений: загрузите сертификат, который мы скачали с сервера Gluu IDP Signing Cert

Затем разверните Конфигурацию утверждения и Базовую конфигурацию утверждения, нажмите Определить настраиваемый диалект утверждения и выполните следующие действия.

  • preferred_username : http://wso2.org/claims/displayName
  • o : http://wso2.org/claims/role

Заявление организации от Gluu Server передается как o в ID Token.

Затем разверните раздел Конфигурация ролей и сопоставьте организацию подписчика, полученную с сервера Gluu, с нашей ролью Internal/subscriber, как показано ниже.

Разверните Федеративные аутентификаторыКонфигурация OAuth2 / OpenID Connect и внесите следующие изменения.

  • Включить OAuth2 / OpenIDConnect: true
  • По умолчанию: true
  • Идентификатор клиента: идентификатор клиента из WSO2ISKM
  • Client Secret: Client Secret из WSO2ISKM
  • URL-адрес конечной точки авторизации: authorizationEndpoint из конфигураций
  • URL-адрес конечной точки токена: tokenEndpoint из конфигураций
  • URL-адрес конечной точки Userinfo: userInfoEndpoint из конфигураций
  • Расположение идентификатора пользователя OpenID Connect: User ID found among claims
  • Дополнительные параметры запроса: scope=openid profile

если вы ввели новую область для включения утверждений preferred_username и organization, добавьте и эту область

  • Включить базовую аутентификацию HTTP для аутентификации клиента: true (по умолчанию сервер Gluu ожидает заголовок базовой аутентификации для аутентификации)

Разверните Своевременную инициализацию и выберите PRIMARY в качестве домена инициализации хранилища пользователей.

и Зарегистрируйтесь.

Прилагается полный снимок наших GluuIDP конфигураций на сервере идентификации в качестве сервера диспетчера ключей 👌👌

✋ Конфигурации поставщика услуг

Затем нам понадобится поставщик услуг для связи с узлом хранилища API. Нажмите Добавить в разделе Поставщики услуг и выполните следующие действия.

и Зарегистрируйтесь.

На следующем экране разверните «Конфигурации утверждений», выберите «Определить настраиваемый диалект утверждения» и определите следующее, чтобы передать утверждение preferred_username в узел Store.

  • preferred_username : http://wso2.org/claims/displayName : Requested

Затем разверните Конфигурация OAuth2 / OpenID Connect в разделе Конфигурация входящей аутентификации и нажмите Настроить. На следующем экране добавьте

  • URL обратного вызова: https://localhost:9443/store/jagg/jaggery_oidc_acs.jag

и Добавить.

Наконец, разверните Конфигурация локальной и исходящей аутентификации и выберите GluuIDP в качестве Федеративной аутентификации.

и Обновить.

Как всегда, полный фрагмент конфигурации поставщика услуг API_STORE представлен ниже👌 🤓

👉 Перед тем, как перейти к следующей части, сделайте заметку или скопируйте client_id и client_secret, которые генерируются в нашем сервис-провайдере, так как они нам нужны при настройке site.json.

Диспетчер API WSO2

Мы почти закончили с нашими конфигурациями. На заключительном этапе нам нужно настроить site.json, который связан с узлом хранилища диспетчера API, чтобы инициировать поток единого входа.

✋ Магазин: Site.json

Откройте каталог WSO2 API Manager, перейдите в <apim>/repository/deployment/server/jaggeryapps/store/site/conf и откройте site.json, чтобы настроить OIDC.

Ниже приведен полный сегмент модели конфигурации OpenID Connect в site.json. Чтобы настроить site.json в своей среде, воспользуйтесь следующей информацией.

Замените Client ID и Client Secret учетными данными, полученными от поставщика услуг API_STORE

"oidcConfiguration" : {
    "enabled": "true",
    "issuer": "API_STORE",
    "identityProviderURI": "https://localhost:9444/oauth2/token",
    "authorizationEndpointURI": "https://localhost:9444/oauth2/authorize",
    "tokenEndpointURI": "https://localhost:9444/oauth2/token",
    "userInfoURI": "https://localhost:9444/oauth2/userinfo",
    "jwksURI": "https://localhost:9444/oauth2/jwks",
    "logoutEndpointURI": "https://localhost:9444/oidc/logout",
    "authHttpMethod": "POST",
    "clientConfiguration" : {
        "clientId" : "Client ID",
        "clientSecret" : "Client Secret",
        "responseType" : "code",
        "authorizationType" : "authorization_code",
        "scope" : "phone email address openid profile",
        "redirectURI" : "https://localhost:9443/store/jagg/jaggery_oidc_acs.jag",
        "postLogoutRedirectURI" : "https://localhost:9443/store/",
        "clientAlgorithm" : "RS256"
    }
}

🎉 Вуаля !!! 🎉

Мы успешно настроили федеративную аутентификацию OpenID Connect между Gluu и единый вход с OpenID Connect с API Store.

👏 👏 👏

Надеюсь, вы найдете это полезным для опробования и настройки федеративной аутентификации и единого входа между WSO2 API Manager и Gluu Server.

Далее небольшой (альфа) тест-драйв…

Тест-драйв

Перейдите на портал магазина с помощью https://localhost:9443/store/ и щелкните Sign-In.

Вы будете перенаправлены на страницу входа в Gluu для ввода учетных данных. Введите учетные данные нашего пользователя Gluu, а затем разрешите атрибутам на экране согласия продолжить объединение и предоставление пользователей Gluu диспетчеру API WSO2.

Войдите в консоль Carbon Management диспетчера WSO2 API и перечислите пользователей. Если федерация прошла успешно и JIT Provisioned прошел без ошибок, вы сможете увидеть нашего пользователя Gluu в появившемся списке.

Удачной укладки !!!! 🤘 ✌️

Исправление проблем

SSL-рукопожатие | PKIX

Если вы столкнетесь с какими-либо проблемами, связанными с SSL-рукопожатием или, точнее, любыми исключениями PKIX, загрузите публичный сертификат домена сервера Gluu и добавьте его на сервер идентификации WSO2 в качестве доверенного хранилища диспетчера ключей.

Вы можете скачать публичный сертификат домена Gluu Server из браузера. Например, в Chrome вы можете щелкнуть значок замка 🔒 рядом с URL-адресом и загрузить сертификат.

После успешного получения сертификата выполните следующую команду keytool для доверенного хранилища внутри каталога <iskm>/repository/resources/security.

# execute the following command and wso2carbon for the password
keytool -import -alias gluu -file <path-of-the-cert> -storetype JKS -keystore client-truststore.jks

После успешного импорта попробуйте еще раз поток SSO в новом окне.

Фреймворк JIT Provisioning & Authentication

Если вы хотите включить журналы отладки для потока подготовки JIT и потоков федеративной проверки подлинности, откройте и добавьте следующее свойство в <server>/repository/conf/log4j.properties

# to enable DEBUG logs in the authentication framework
log4j.logger.org.wso2.carbon.identity.application.authentication.framework = DEBUG

И JIT Provisioning обрабатывается org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.JITProvisionningPostAuthenticationHandler.

использованная литература