我应该在消息 queue 中对事件消息实施身份验证吗?

Should I implement authentication for event messages in a messaging queue?

"Enterprise Integration Patterns" (been using the book as a reference while I'm implementing a queue messaging system), there's the concept of a command message, document message, event message

在我的系统中,我决定将 "pull model" 用于事件消息。因此,当数据库中的文档更新时,它会广播这样的事件消息:

routing key: 'UserUpdated'
body: { _id: '5787f132f50f7b03002cf835' }

然后,任何感兴趣的观察者都可以简单地通过 RPC (request/reply) 通道请求文档的最新版本(在本例中为 "User")并执行他们需要执行的操作该状态以便在他们自己的服务中进行更改(例如,当用户更新时,另一个系统可能想知道它,然后将该用户记录缓存在 Redis 或其他东西中)。

在我的其他消息类型中(例如,像UpdateUser这样的命令消息),我也在消息headers中发送了一个授权令牌。这是有道理的,因为命令 UpdateUser 旨在调用另一个系统中的更改。

但是,在 事件消息 中也放入授权令牌是否有意义?

我的想法是,该事件不一定要求对任何观察者进行更改,也不需要 "authorized" 只是为了通知系统发生的事情(此外,两个系统都已经连接到相同的 queue 服务器,这需要一些身份验证才能开始);相反,观察者只是在消息中看到一些 _id,并单独请求一个文档,然后可以根据需要更改自己的服务(在向发起事件消息的服务器请求文档时,观察者 是否 提供授权令牌)。有什么想法吗?

任何对实施细节感兴趣的人:

However, does it make sense to also put an authorization token inside of event messages?

不,只要没有人可以伪造事件消息。