red*_*guy 6 authorization oauth jwt microservices
我很困惑 - 在微服务之间以异步方式传递用户身份(授权信息)的最佳方式是什么?
假设我已经有了处理身份验证和颁发 JWT 令牌的入口点(api 网关)。然后用户使用此令牌调用某个 API 端点。到此为止,一切都清楚了。现在 - 此端点需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。此外 - 该通道是异步的(JMS/Kafka),这意味着处理可能会延迟......
我也在考虑其他情况:我们有两个服务 A 和 B。它们都公开了可能被外部用户访问的 API(JWT 令牌身份验证),但它们也需要异步协作(通过 JMS)。他们都需要用户身份上下文。再次 - 如何通过它?
我可以:
他们对我都有缺点,我找不到通用的解决方案......
- 编辑
考虑案例:有产品目录服务和订购服务。两者都公开公共 API。用户下订单,它排队等待处理。第一步是验证产品是否正常以及是否允许用户订购。处理可能会调用产品目录服务,但必须传递用户上下文。这就是我要说的部分。
你有
在第二种情况下,MS2 代表用户行事,因此用户的 JWT 在这里有意义。
在第一种情况下,Kafka Consumer 只是同步 MS1 中已经发生的操作。它不代表外部用户行事。外部用户在这里没有任何控制权。在此阶段用户不能读取或写入任何错误的内容。用户交互以 MS1 本身结束。
因此,Kafka Consumer 中不需要外部用户 JWT 来进行授权。但是,在消息中,您可以传递用户上下文(例如用户名)和其他相关详细信息以进行处理。根据这些信息,您需要决定是否继续订单。
然而,Kafka 消费者将需要它自己的访问令牌,该令牌将在所有不同的用户订单中使用。您需要在此处用于 Kafka 使用者和 MS2 之间通信的 OAuth 2.0 授权类型称为“客户端凭据”授权类型。
在这里,消费者将使用适当的凭据和客户端 ID 直接与授权服务器联系以获取访问令牌
归档时间: |
|
查看次数: |
2476 次 |
最近记录: |