已验证的User-ID
在一些场景下,消费者知道消息生产者身份会有用武之地。因此我们确保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
标签。默认没有用户会有这个标签,且administratot
标签也不允许该功能。
federation插件可以从设置了 user-id 属性的上游发送消息。默认情况下,会清除该属性(因为无法知道上游broker是否可信)。如果上游的 trust-user-id 属性被设置,那么将从上游broker处传递user-id属性,并假定该user-id属性已在上游代理处得到验证。