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

Is it the microservice's responsibility to validate the API key and JWT token?

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

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

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

问题

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

如果您有许多微服务都直接交互(sending/receiving 调用、发现新实例等),那么微服务需要执行此验证。这意味着每个服务都需要使用 framework/library 来实现验证逻辑(或 copy-paste 周围的代码,这在某些场景下确实有意义)。他们还需要分发和轮换 JWT public 密钥。

但是,如果您使用 proxies/service 网状网络来处理您的网络调用,那么您可能会将其委托给代理来处理。例如 Envoy 代理包含一个 jwt filter 可以在网络层进行 JWT 解码。根据您的体系结构和服务设计,在代理层处理解码可能比您自己实现要容易一些。这里有一些折衷,因为您需要部署和维护代理,并且可能需要 re-design 您的应用程序来解析来自 headers 的决定(yes/no,admin/unauthed 用户)或代理设置的 cookie。