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

Posted

技术标签:

【中文标题】在微服务环境中,任何生产者都应该能够验证 JWT 令牌吗?【英文标题】:In a microservice environment, should any producer be able to verify JWT tokens? 【发布时间】:2017-11-12 06:06:08 【问题描述】:

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

这是我的假设场景。

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

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

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

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

授权服务没有往返

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

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

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

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用 PKI 签名/验证系统。在这种方法中,您的授权服务将使用私钥对 JWT 进行签名,并且所有消费服务都需要公钥才能使用 JWT。公钥可以很容易地分发——如果你的架构中有配置服务器,可以通过它。即使有人闯入了您的一项服务,他也将只有公钥而不是私钥。

【讨论】:

有趣!我不知道为什么我不考虑它:)

以上是关于在微服务环境中,任何生产者都应该能够验证 JWT 令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章

在微服务架构的每个服务中验证访问令牌 (JWT)

使用 JWT 和 OpenID Connect 在微服务中进行客户端身份验证

如何在微服务架构中进行身份验证和授权

如何在微服务架构中实现基于角色的安全性

JHipster - 网关如何在微服务中进行身份验证?

我们如何在同一spring应用程序中同时添加JWT和基本身份验证?