我们正在评估 RabbitMQ 的上下文,其中许多不同的用户会连接到它并有以下问题:
- 创建一个 RabbitMQ 用户并在运行时为我们系统的每个想要连接到 Rabbit 的用户设置他的权限并在他的会话终止后删除这个 RabbitMQ 用户是否可行?
- 即使我们有成千上万甚至数百万的用户进行大量连接?
- 如果是这样,我们应该使用 RabbitMQ 管理 API (REST) 吗?
- 与其通过 RabbitMQ 的用户和 ACL 系统来强制执行安全性,我们是否应该为每个用户提供一个具有随机(某种会话密钥)名称且其他用户无法猜到的专有 Exchange?
提前致谢。
编辑 - 澄清
每个连接到我们系统的用户应该只能对某些动态创建的队列或交换进行读写。我们不希望未经授权的用户能够订阅其他人的队列。此外,我们可能允许匿名用户连接到我们的系统,但他们必须遵守相同的安全规则。
我们找到的解决方案是:
- 使用 RabbitMQ 的认证和授权系统。我们不确定它是否被设计成这种动态的。或者是吗?
- 为每个用户创建某种会话,并使用该随机会话密钥来命名用户的交换和/或队列。这样,只有用户会知道它应该订阅哪些队列。这听起来足够安全,足以满足我们的需求。这是更好的方法吗?