Конфиденциальность JMS / MQ между клиентами

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

Поэтому мне интересно, есть ли у JMS / ActiveMq возможность контролировать, какие клиенты получают какие сообщения?

Я хочу, чтобы все клиенты подключались к одному и тому же провайдеру JSM ("назначение") и использовали только сообщения, предназначенные для них. Это была бы простая установка с точки зрения серверов.

Альтернативой может быть получение конечных точек веб-сервиса от всех клиентов и выполнение ws-вызовов каждый раз, когда сервер получает сообщение для клиента. Я думаю, что этот альтернативный звук "неправильный", так как я считаю, что звонки раздуваются. Каждый ws-вызов требует больших накладных расходов, и этот сервер должен будет выполнять 1000 вызовов каждый день. На мой взгляд, это было бы неоптимальным для сервера...

1 ответ

Краткий ответ: используйте селектор сообщений.

Подробный ответ: в вопросе не упоминается, как начинается разговор. Итак, вот мои ответы для обоих сценариев.

а) Если клиент инициирует разговор (т.е. клиент отправляет сообщение на сервер и ожидает ответа).

Это сценарий запроса / ответа. Messaging/JMS- это разъединенная система связи. Но запрос / ответ - это распространенный шаблон в JMS. Это может быть реализовано с использованием шаблона корреляции.

  • Уникальный идентификатор (идентификатор корреляции) отправляется частью сообщения запроса.
  • Сервер получает сообщение и устанавливает идентификатор корреляции в ответном сообщении.
  • Клиент использует Селектор сообщений, чтобы получить сообщение с правильным идентификатором корреляции.

б) Если сервер инициирует диалог (т. е. Сервер отправляет сообщения клиентам без запроса клиента).

В этом случае аналогичный подход может быть использован.

  • Фиксированный идентификатор клиента присваивается каждому клиенту.
  • Сервер поддерживает все идентификаторы клиента и устанавливает идентификатор клиента получателя в качестве идентификатора корреляции сообщения.
  • Клиент использует Селектор сообщений, чтобы получить сообщение с идентификатором корреляции, равным его идентификатору клиента.

Обновление о конфиденциальности.

Следующая информация, извлеченная из этой ссылки, полезна для понимания безопасности JMS.

JMS не определяет контракт безопасности или API для контроля конфиденциальности и целостности сообщений. Безопасность считается специфичной для JMS-провайдера функцией. Он управляется системным администратором, а не реализуется программно или во время выполнения сервера J2EE.

Двумя основными функциями безопасности JMS являются Аутентификация и Авторизация. Насколько мне известно, безопасность JMS для клиентского доступа фокусируется на защите адресатов JMS (не отдельных сообщений). Пока клиент имеет доступ к пункту назначения, роль безопасности, назначенная ему, применима ко всем сообщениям, принадлежащим пункту назначения.

Основываясь на этом,

Решение 1. Если клиентский код контролируется доверенной стороной.

Следуйте моим решениям в моем первоначальном ответе. Это обеспечит доставку сообщения нужному человеку. Но ничего не защитит, если клиентский код намеренно изменен для получения всех сообщений.

Решение 2. Назначьте каждому клиенту частное назначение и учетную запись пользователя и настройте безопасность так, чтобы учетная запись пользователя клиента могла получить доступ только к своему назначению.

Примечание. Нашел ссылку на "Ограничения для селекторов сообщений для предоставления авторизации на уровне сообщений". Но я думаю, что это особенность, специфичная для поставщика.

Надеюсь, это будет полезно.

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