【问题标题】:How to authenticate async event messaging between services in microservice architecture如何在微服务架构中验证服务之间的异步事件消息传递
【发布时间】:2020-09-18 09:59:44
【问题描述】:

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

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

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

【问题讨论】:

  • 你真的需要这个 JWT 令牌来处理从 SQS 消费的消息吗?难道你不能只将 JWT 的使用限制在你的入口点,验证采取,然后将其余数据发送到 SQS 进行进一步处理吗?
  • 虽然这是一个选项,并且目前在我的应用程序中使用。我的应用程序是一个 SaaS 应用程序,它有多个租户和一个。我需要确保这些租户数据永远不会交叉和 b。对数据的访问尽可能安全,例如有人不能只是手动将消息放置在允许一个租户访问另一个租户数据的 SQS 队列上。如果这是 HTTP,我只会传递相同的令牌,因此我会询问消息传递中是否有类似的方式。

标签: authorization microservices messaging


【解决方案1】:

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

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

【讨论】:

  • 这是我的想法。我一直在看aws.amazon.com/partners/saas-factory,他们声明在服务通信之间使用原始 JWT,这适用于同步调用。该视频讨论了使用策略来表达用户可以做什么,这可以与消息一起在服务之间传递。这可以与自定义 JWT 一起完成,以在您的答案中进行识别。
  • 没有过期时间的内部令牌是一种非常值得怀疑的方法,因为如果一项服务被黑客入侵,那么您的整个系统都会受到损害。
  • 这取决于您所处的场景,如果您处于无法信任任何其他服务的零信任场景,那么系统的工作量和过载当然会增加。一如既往,所有决定都意味着权衡
猜你喜欢
  • 2018-07-15
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2014-01-08
  • 2017-02-24
  • 2017-04-21
相关资源
最近更新 更多