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