Spring Cloud Security JWT:使用配置服务器/密钥轮换分发公钥

Ben*_*n M 7 spring jwt key-pair spring-cloud spring-cloud-config

如何在Spring Cloud环境中管理用于签署/验证JWT的私钥/公钥?

问题":

目前我生成一个密钥对.然后将Private + Public Key复制到我的auth-server应用程序.并将公钥复制到每个资源服务器.

当我现在想要实现"密钥轮换"时,我必须以某种方式为每个服务填充新密钥.


想法:

也许我可以用它spring-cloud-config-server来存储和分发Key Pairs?

配置服务器已提供数据库登录凭据.那么为什么不在那里存储更敏感的信息呢?


问题(S):

如果这是要走的路:你将如何实现密钥对分配spring-cloud-config-server

你有任何安全问题吗?

你是怎么解决这个问题的?我想有更好的解决方案.


编辑:

也许有一些解决方案使用Spring Oauth的security.oauth2.resource.jwt.keyUriJWK属性?

Ore*_*ron 2

首先,我会有一个隐藏 JWT 机制的网关。它将允许您从网关撤销令牌。如果用户知道他的令牌,则在不撤销公钥的情况下无法撤销它。它看起来像这样:

在此输入图像描述

使用 zuul 的过滤器和会话范围的 bean 很容易实现。

其次,你有没有在评论中说过,你可以简单地创建一个新的私钥来生成新的代币。但所有资源服务器必须能够读取所有先前生成的令牌。所以你需要在每个资源服务器上有一个公钥列表,并且每次收到请求时,你必须尝试使用​​每个公钥进行验证。也许您可以有一个公钥 id(并将 id 放在每个生成的令牌上)以避免对此任务进行愚蠢的查找。

对于密钥分发,使用 Spring Cloud Bus 和 Rabbit mq 对我来说似乎是正确的。