RabbitMQ + Web Stomp和安全性

时间:2012-09-04 12:31:44

标签: javascript rabbitmq stomp

RabbitMQ + Web Stomp非常棒。但是,我有一些主题,我想要以只读或只写方式保护。

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

主题采取形式:/ topic / blah in stomp,它使用路由键“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/

2 个答案:

答案 0 :(得分:7)

试试这个https://github.com/simonmacmullen/rabbitmq-auth-backend-http 它更加灵活。 基本上它是兔子的小型auth插件,它将ACL决策委托给一个通过http(你有完全控制权)的脚本,只需要回复“允许”或“拒绝”

答案 1 :(得分: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 读取数据,并仅使用可在内部直接与兔子对话的外部AJAX界面发布消息。
  • 或者,不要使用web-stomp插件并手动在SockJS和RabbitMQ之间编写一个简单的桥接器。这为您提供了更大的灵活性,但需要更多的工作。