Как исправить цикл входа OIDC в консоли Artemis 2.43
В Artemis 2.43 OIDC‑авторизация в веб‑консоли зацикливается. Узнайте, как настроить rolePrincipalClass, map‑роли и разместить hawtio‑oidc.properties, чтобы вернуть доступ.
Я обновил Apache ActiveMQ Artemis до версии 2.43.0 и настроил аутентификацию OIDC для веб‑консоли через файл hawtio‑oidc.properties. Консоль всё ещё запрашивает данные у провайдера OIDC, но сразу после входа меня перенаправляют обратно на страницу логина, и я не могу войти как обычный пользователь Artemis. Та же конфигурация работала без проблем в Artemis 2.42.0. Что изменилось в 2.43.0, что вызывает эту проблему, и как правильно включить OIDC‑аутентификацию для веб‑консоли Artemis в этой версии?
Проблема с бесконечным циклом входа возникла из‑за изменений в движке веб‑консоли, которые появились в Artemis 2.43.0.
Брокер перешёл с Hawtio 2.x на Hawtio 4, и теперь для OIDC используется другая реализация principal‑класса, а роль должна присутствовать в ID‑токене.
Поскольку старый файл hawtio‑oidc.properties больше не содержит нужных настроек, брокер не может сопоставить аутентифицированного пользователя с безопасной ролью, и консоль сразу же перенаправляет обратно на страницу логина.
Что изменилось в 2.43.0
- Консоль теперь построена на Hawtio 4.
- Интеграция OIDC требует явного указания класса principal‑роли.
- По умолчанию используется
io.hawt.web.auth.oidc.RolePrincipal, который несовместим с ролями JAAS Artemis. - Провайдер OIDC должен выдавать claim, совпадающий с ролью брокера, используемой для доступа к консоли (по умолчанию роль
amq). - Файл
hawtio‑oidc.propertiesдолжен находиться в каталогеetcброкера (неinstance/etc, как в старых релизах).
Эти изменения задокументированы в примечаниях к версии 2.43.0 и в руководстве по OIDC Hawtio.
Как включить OIDC в Artemis 2.43.0
| Шаг | Действие | Пример |
|---|---|---|
| 1 | Поместить конфигурацию OIDC в нужное место | ARTEMIS_HOME/etc/hawtio-oidc.properties |
| 2 | Определить класс principal‑роли | Добавьте rolePrincipalClass=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal |
| 3 | Сопоставить роль OIDC с ролью Artemis | Добавьте role=amq (или любую роль, которую вы создадите в провайдере) |
| 4 | Разрешить роль в брокере | В broker.xml задайте права, например:<permission type="execute" role="amq" address="**" /> |
| 5 | Установить роль консоли в профиле брокера | В artemis.profile задайте HAWTIO_ROLE=amq |
| 6 | Убедиться, что провайдер OIDC выдаёт роль | В Keycloak создайте клиентскую роль amq и назначьте её пользователям, которым нужен доступ к консоли. |
| 7 | Перезапустить Artemis | artemis-service restart или эквивалент |
Пример hawtio-oidc.properties
# Имя конфигурации OIDC – отображается в UI логина
name=OIDC
# Провайдер OIDC
issuer=https://keycloak.example.com/realms/myrealm
clientId=artemis-console
clientSecret=xxxxxxxxxxxxxxxx
# Redirect URI – должен совпадать с URL консоли
redirectUri=https://artemis.example.com/hawtio
# Сопоставление ролей для Artemis
role=amq
rolePrincipalClass=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal
Пример artemis.profile
# Использовать роль OIDC для веб‑консоли
HAWTIO_ROLE=amq
Быстрый тест
- Войдите в консоль.
- Если она всё ещё перенаправляет, посмотрите в консоль браузера на ошибки типа “role not found”.
- Проверьте, что ID‑токен содержит claim
amq(можно воспользоваться https://jwt.ms). - Если claim отсутствует, добавьте роль в провайдере OIDC и назначьте её пользователю.
После корректного сопоставления роли консоль аутентифицируется один раз и сохраняет сессию.
Итоги
- 2.43.0 перешёл на Hawtio 4, что нарушило старую конфигурацию OIDC.
- Теперь требуется свойство
rolePrincipalClassи соответствующий claim роли от провайдера. - Поместите обновлённый
hawtio‑oidc.propertiesвetc, настройте роль и класс principal, а также профиль и права брокера.
После этих изменений веб‑консоль Artemis будет корректно работать с OIDC, как и в 2.42.0.