【发布时间】:2019-01-27 13:35:58
【问题描述】:
如何在 Spring Cloud 环境中管理用于签名/验证 JWT 的私钥/公钥?
“问题”:
目前我生成了一个密钥对。然后将 Private + Public Key 复制到我的 auth-server 应用程序中。并将公钥复制到每个资源服务器。
当我现在想要实现“密钥轮换”时,我必须以某种方式为每个服务填充新密钥。
想法:
也许我可以使用spring-cloud-config-server 来存储和分发密钥对?
配置服务器已提供数据库登录凭据。那么为什么不在那里存储更敏感的信息呢?
问题:
如果这是要走的路:您将如何使用spring-cloud-config-server 实现密钥对分配?
您有任何安全问题吗?
你是如何解决这个问题的?我想有更好的解决方案。
编辑:
也许有一些使用 Spring Oauth 的 security.oauth2.resource.jwt.keyUri JWK 属性的解决方案?
【问题讨论】:
-
你见过Spring Vault吗?
-
还没有。感谢您的提示。现在我一直在看它,我并没有真正理解 Vault 和 Config Server 之间的区别。我也可以在 Config Server 中使用加密。
...我的问题不是“保护私钥/公钥”。问题更像是“向我的服务分发公钥”。我的身份验证服务应该每 24 小时生成一个新的密钥对,用于签署 JWT,然后它需要以某种方式将新的公钥发布到所有其他服务(或者只是将其发布到配置服务器,所有其他服务将检索从那里)。 -
您是否同意这样做会拒绝所有之前生成的 JWT 令牌?
-
不,这行不通。我需要保留当前和以前的密钥对,然后(取决于令牌的过期时间戳)决定使用哪个密钥来验证 JWT。如果我拒绝以前生成的每个令牌,客户必须每天一次又一次地提供他的凭据。这对用户不友好。
... EDIT:应该足以保留公钥。每次轮换都可以丢弃私钥。 -
我的回答对您有帮助吗?
标签: spring jwt spring-cloud spring-cloud-config key-pair