已验证的用户 ID
在某些情况下,消费者能够知道发布消息的用户的身份非常有用。
为了实现这一点,如果设置了 user-id
消息属性,RabbitMQ 将对其进行验证。换句话说,如果发布者设置了此属性,则其值必须等于连接用户的名称。
如果未设置 user-id
属性,则发布者的身份将保持私有,并且不会执行任何验证。
示例 (Java)
AMQP.BasicProperties properties = new AMQP.BasicProperties();
properties.setUserId("guest");
channel.basicPublish("amq.fanout", "", properties, "test".getBytes());
仅当用户为“guest”时,此消息才能成功发布。
额外的身份验证层
如果安全是一个严重的问题,您应该考虑将此功能与 启用 TLS 的 连接结合使用,可能还需要服务器执行客户端的对等证书链验证。
特殊情况:Impersonator 标签
有时,允许应用程序伪造 user-id
可能很有用。为了允许这样做,发布用户可以设置其 impersonator
标签。默认情况下,没有任何用户设置此标签。特别是,administrator
标签不允许这样做。
联邦交互
联邦插件 可以传递来自上游的消息,上游设置了 user-id
属性。默认情况下,它将清除此属性(因为它无法知道上游代理是否可信)。如果在上游设置了 trust-user-id
属性,则它将从上游代理传递 user-id
属性,并假定它已在那里验证。