在微服务环境中,任何生产者都应该能够验证 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 令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章