在微服务环境中,任何生产者都应该能够验证 JWT 令牌吗?

del*_*ber 3 authentication authorization token jwt microservices

我正在尝试弄清楚如何在微服务环境中管理授权。

这是我的假设场景。

我有一项服务提供身份验证(使用devisegem)和通过 oauth2 授权(使用doorkeepergem)。登录后,服务会向用户返回JWT令牌。

现在假设我有两个 API 服务器。用户必须向这些 API 服务器提供 JWT 令牌才能访问私有资源。

是否可以与我的两个 API 服务器共享我用来签署 JWT 令牌的 JWT 密钥,以便它们可以解码令牌并验证其有效性?或者我的 API 服务器是否应该将 JWT 令牌转发到授权服务并要求其验证?

与 API 服务器共享 JWT 密钥的优点:

  • 无需往返授权服务

与 API 服务器共享 JWT 密钥的缺点:

  • 如果有人闯入我的任何 API 服务器,他/她就可以访问我的 JWT 密钥

我被困住了。我什至不知道是否有第三种解决方案我没有考虑:)

谢谢!

Gur*_*thi 6

您可以使用 PKI 签名/验证系统。在这种方法中,您的授权服务将使用私钥对 JWT 进行签名,并且所有使用服务都需要公钥才能使用 JWT。公钥可以轻松分发 - 如果您的架构中有配置服务器,则可以通过配置服务器进行分发。即使有人闯入了您的一项服务,那么他也只有公钥而没有私钥。