我正试图弄清楚如何在微服务环境中管理授权 .
这是我的假设情景 .
我有一个服务,提供身份验证(使用devise gem)和oauth2授权(使用doorkeeper gem) . 登录后,该服务会向用户返回JWT令牌 .
现在让我们假设我有两个API服务器 . 用户必须向这些API服务器提供JWT令牌才能访问私有资源 .
是否可以共享JWT密钥,我曾用我的两个API服务器签署JWT令牌,以便他们可以解码令牌并验证其有效性?或者我的API服务器是否应该将JWT令牌转发给授权服务并要求它进行验证?
与API服务器共享JWT密钥的优点:
- 没有往返授权服务
与API服务器共享JWT密钥的缺点:
- 如果有人在我的任何API服务器中断,他/她可以访问我的JWT密钥
我被卡住了 . 我甚至不知道是否有第三种解决方案我没有考虑:)
谢谢!
1 回答
您可以使用PKI签名/验证系统 . 在此方法中,您的授权服务将使用私钥对JWT进行签名,并且所有使用服务都需要使用公钥来使用JWT . 公钥可以轻松分发 - 如果您的架构中有公钥,可以通过配置服务器 . 即使有人闯入您的某项服务,他也只会拥有公钥而不是私钥 .