如何在微服务架构中验证服务之间的异步事件消息传递

How to authenticate async event messaging between services in microservice architecture

如果我的服务通过 Sync HTTP 进行通信,我会将 JWT 令牌传递给每个服务,这样每个服务都会对请求进行身份验证,并确保它只为经过身份验证的用户提供数据。

但是,如果我将我的通信机制更改为使用异步消息传递(例如 RabbitMQ),我现在如何将事件验证到发起事件的用户范围。是否应将相同的 JWT 作为事件消息的一部分传递。我发现此机制存在问题,因为 JWT 可能在服务处理消息时已过期,这意味着消息将不会得到处理。

这是一般方法和最佳实践,还是应该创建某种可信策略并将其作为别名传递给原始 JWT,说明用户可以做什么和有权访问什么,或者是否有不同的方法?

一旦用户调用第一个微服务,您应该信任服务之间的通信,因此您不需要 jwt 或标准令牌。您可以在事件中传递原始用户或其范围的某种标识,以确保接收者服务相应地过滤信息。

这个标识甚至可以是一个没有过期的 jwt 令牌,因为它将是一个仅在您的服务内部使用的令牌,因此不存在恶意用户篡改它的风险。