5

RabbitMQ + Web Stomp 很棒。但是,我有一些我希望以只读或只写方式保护的主题。

似乎保护这些的唯一机制是使用rabbitmqctl。我可以创建一个虚拟主机、一个用户,然后应用一些权限。然而,这就是 Stomp 和 Rabbit 实现开始崩溃的地方。

主题形式为:stomp 中的 /topic/blah,它使用路由键“blah”路由到 Rabbit 中的“amq.topic”。似乎没有办法为路由键设置权限。似乎:

rabbitmqctl set_permissions -p vhost user ".*" ".*" "^amq\.topic"

是我能做的最好的,这仍然是“所有”的话题。我也研究过交换,但在 javascript 中无法动态定义这些。

我在这里错过了什么吗?

参考:http ://www.rabbitmq.com/blog/2012/05/14/introducing-rabbitmq-web-stomp/

4

2 回答 2

8

试试这个https://github.com/simonmacmullen/rabbitmq-auth-backend-http 灵活多了。基本上它是一个用于rabbit的小型身份验证插件,它将ACL决定委托给一个通过http(你可以完全控制它)的脚本,它只需要回复“允许”或“拒绝”

于 2013-11-26T08:35:53.947 回答
6

是的,使用 RabbitMQ-WebStomp,您几乎只能使用普通的 RabbitMQ 权限集。这并不理想,但您应该能够正确设置基本权限。看看 RabbitMQ 文档:

http://www.rabbitmq.com/access-control.html

快速查看 stomp 文档:

http://www.rabbitmq.com/stomp.html

是的,您不能为特定的路由密钥设置权限。也许您应该使用“交换”语义,并明确地将交换与队列绑定(即:不要使用主题):

/exchange/exchange_name[/routing_key]。

请在 rabbitmq-discuss 邮件列表上询问有关 RMQ 权限的具体问题。那里的人真的很有帮助。

不幸的是,对于一些更复杂的场景,RMQ 权限集是不够的。在这种情况下,您可能想要:

  • 仅使用 STOMP 来读取数据,并且仅使用一些可以在内部直接与 rabbit 对话的外部 AJAX 接口发布消息。
  • 或者,不要使用 web-stomp 插件并手动编写 SockJS 和 RabbitMQ 之间的简单桥梁。这为您提供了更大的灵活性,但需要更多的工作。
于 2012-09-05T11:12:32.970 回答