微服务如何在异步通信中做授权?

Posted

技术标签:

【中文标题】微服务如何在异步通信中做授权?【英文标题】:How Micro-services does authorization in asynchronous communication? 【发布时间】:2020-06-11 20:37:47 【问题描述】:

我正在实现一组在 ASP.NET 核心和一个 UI 中开发的微服务的身份验证和授权。交互/通信是在:

    UI 通过API网关(OCELOT)的微服务,正在通过JWT完成授权。(在这种情况下没有问题) 微服务 微服务是异步的,通过 Azure 服务总线完成。

想知道我们如何在 CASE-2 中实现授权,微服务 使用 JWT 的微服务。 这里不想通过Certificate来实现。虽然 我们通过私有网络,白名单做了一些保护 但考虑到深度防御,我们是否也可以实施 考虑异步通信的 JWT 期间的授权 微服务之间?这样做是个好习惯吗?以及如何 在这种情况下实现 JWT。

【问题讨论】:

【参考方案1】:

在 API Gateway 中,修改向下游发送到后端微服务的请求。 在此请求中,注入 Bearer 令牌,即 JWT。现在每个微服务都可以访问用户发送的 JWT。 当 MS-1 与 MS-2 对话时,将此令牌包含在 HTTP 标头中,然后让 MS-2 根据 JWT 中的角色/声明做出决定。 在ServiceBus 的情况下,创建包含 JWT 的消息,以便消费者在反序列化后可以访问该令牌。

【讨论】:

如果我理解,MS1 不知道 MS2。它只是将一条消息放在队列中,将被 MS2 消费 @user3169330 : 如果 MS1 在没有任何用户输入的情况下调用 MS2 会怎样。 但是 MS1 会调用 MS2 WITHOUT 来自使用 JwT 的用户的 API 网关请求吗?没有权利?因此,MS1 将始终拥有用户提供的 JwT,并由 API 网关注入 HTTP 标头。然后 MS1 将提取该 JwT,然后将其放入服务总线消息中。 HTH

以上是关于微服务如何在异步通信中做授权?的主要内容,如果未能解决你的问题,请参考以下文章

通过异步通信从微服务获取用户启动操作的响应

服务异步通信RabbitMQ

微服务的异步通信技术RabbitMQ

使用 AMQP 和 Vert.x 实现微服务间的异步通信

MicroServices - 通过AMQP与多个接收器场景进行异步通信

在微服务之间传递用户身份和授权