ActiveMQ - Авторизация - Отмененные роли не обновляются во время выполнения - Пользователь может получить доступ к очереди для отмененной роли
Команда,
Я выполняю перезагрузку во время выполнения настроек карты авторизации в activemq.xml, используя следующую конфигурацию ( http://activemq.apache.org/runtime-configuration.html)
<broker xmlns="http://activemq.apache.org/schema/core" start="false" ... >
<plugins>
<runtimeConfigurationPlugin checkPeriod="1000" />
</plugins>
...
</broker>
Я выполнил тестовые задания, из которых один конкретный (критический) не работает должным образом. Неудачный тестовый пример состоит в том, что пользователь A имеет права на чтение и запись через очередь A. Пользователь-А успешно читает и пишет. Но, если роль удалена для пользователя A, без перезапуска ActiveMQ, пользователь A все еще может читать и записывать в очередь A. Ожидаемый результат состоял в том, что ActiveMQ должен запретить пользователю читать и писать в очередь A.
Подробные шаги заключаются в следующем.
Действие 1: после запуска посредника с пользователем A без записи карты для тестовой очереди
<plugins>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
<authorizationEntry queue="test.queue.A>" read="admins" write="admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
Результат 1: Вход пользователя A Успешен, но не авторизован для доступа к тестовой очереди
Действие 2: затем я изменил карту авторизации и позволил пользователю A читать и писать в тестовой очереди. то есть сделал пользователя-члена "grp_subscribeers"
<plugins>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="grp_subscribers, admins" write="grp_subscribers, admins" admin="grp_subscribers, admins"/>
<authorizationEntry queue="test.queue.A>" read="grp_subscribers" write="grp_subscribers" admin="grp_subscribers, admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
Результат 2: Вход пользователя A Успешный и авторизованный в тестовой очереди
Действие 3: затем я снова изменил карту авторизации, удалив доступ пользователя A в тестовую очередь
<plugins>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>
<authorizationEntry queue="test.queue.A>" read="admins" write="admins" admin="admins"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
Результат 3: пользователь. Вход в систему успешен и все еще авторизован в тестовой очереди, в этом и заключается проблема. Пользователь A не должен быть авторизован в тестовой очереди.
Я пробовал разные способы и много чего делал, если мне не хватает. Я верю, что что-то мне не хватает
1 ответ
Activemq AuthorizationMap обновляется с использованием атрибута checkPeriod. После изменения ролей авторизации соединения потребителя / подписчика / производителя необходимо обновить, что можно обновить, остановив или запустив транспортный соединитель через jmx.