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

时间:2017-06-10 08:06:58

标签: authentication authorization token jwt microservices

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

这是我的假设情景。

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

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

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

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

  • 没有往返授权服务

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用PKI签名/验证系统。在此方法中,您的授权服务将使用私钥对JWT进行签名,并且所有使用服务都需要使用公钥来使用JWT。公钥可以轻松分发 - 如果您的架构中有公钥,可以通过配置服务器分发。即使有人闯入您的某项服务,他也只会拥有公钥而不是私钥。