【问题标题】:rabbitmq token based authenticationrabbitmq 基于令牌的身份验证
【发布时间】:2014-09-16 14:26:22
【问题描述】:

我打算使用rabbitmq在我的网络应用中实现推送通知。

每个用户都有一个队列。我想防止未经授权的用户订阅其他人的队列。这可以使用用户必须提供的身份验证令牌来实现吗?

目前,作为一种解决方法,我正在考虑使用 django 代理 rabbimq 以检查提供的身份验证令牌是否正确,并且仅在经过身份验证后才将请求传递给rabbitmq...但这感觉不太理想!

【问题讨论】:

  • 为什么你认为它不是最优的?您是否向未经授权的用户提供对 RabbitMQ 的直接访问?授权用户是否直接访问 RabbitMQ?如果是,它们是否共享相同的凭据?
  • 我认为这是次优的,因为 rabbitmq 与 django 位于不同的服务器上,所以代理将是另一个往返,因此会增加延迟。不过,更高的延迟并不是一个巨大的缺点。这也意味着如果 django 没有启动,通知将停止工作。

标签: django push-notification rabbitmq


【解决方案1】:

您可以通过使用exclusive 队列和RabbitMQ 权限来实现相同的功能。

独占队列只能由当前连接访问,并且 当该连接关闭时被删除。被动声明 不允许其他连接排他队列。

【讨论】:

  • 这很好,除了通知将被推送到队列中。如果用户在通知发生时未登录,我们不希望用户错过通知。
  • 在这种情况下,请查看dead-letter-exchange,您可以将未在队列中结束的消息路由到“默认”队列。或者您可以使用带有“强制”标志的发布确认。这样发布者就会知道消息是否没有传递到队列中。
  • 也许只在应用程序端处理身份验证而不将应用程序逻辑与消息代理逻辑混合是个好主意?
  • 从表面上看,exclusive queues 似乎不允许我的 django 应用程序将消息添加到队列中 - 看起来只有创建队列的连接才能与之交互。
  • 当您发布消息时,您没有将其发布到队列中,而是将其发布到交换器,所以我看不出有任何问题
猜你喜欢
  • 2021-01-25
  • 2016-01-23
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2017-07-10
  • 2020-03-03
  • 1970-01-01
相关资源
最近更新 更多