验证 API 密钥和 JWT 令牌是微服务的责任吗?

Aft*_*ess 1 authentication authorization api-key jwt microservices

我的微服务将以两种方式调用: 1. 由公共网站的未经身份验证的用户调用。2. 通过内部 UI 的经过身份验证的用户来执行管理功能。

我计划使用 OIDC 和 JWT 令牌来验证管理员用户从管理 UI 发出的 API 调用。该令牌中将包含声明,微服务将使用该声明来确定用户是否有权访问此 API。

我计划使用面向公众的网站上的 API 密钥来进行未经身份验证的用户进行的 API 调用。微服务将验证 API 请求标头中的 API 密钥,以确定 API 调用是否来自可信来源。

问题

  • 这是处理身份验证和授权的正常/可接受的方式吗?
  • 微服务有责任评估 JWT 令牌和 API 密钥吗?每个微服务都必须在我的设计中做到这一点。

小智 5

是的,微服务有责任验证 API 密钥和 JWT 令牌,除非您使用服务网格。

如果您有许多微服务都直接交互(发送/接收调用、发现新实例等),那么微服务需要执行此验证。这意味着每个服务都需要使用框架/库来实现验证逻辑(或复制粘贴代码,这在某些情况下确实有意义)。他们还需要分发和轮换 JWT 公钥。

但是,如果您使用代理/服务网格来处理网络调用,那么您可能可以将其委托给代理来处理。例如,Envoy 代理包含一个jwt 过滤器,可以在网络层进行 JWT 解码。根据您的架构和服务设计,在代理层中处理解码可能比您自己实现要容易一些。不过,这里有一些权衡,因为您需要部署和维护代理,并可能重新设计您的应用程序,以根据代理设置的标头或 cookie 解析决策(是/否、管理员/未经身份验证的用户)。