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