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.

Другие вопросы по тегам