【问题标题】:Shared signature key for JWT in various Microservices各种微服务中 JWT 的共享签名密钥
【发布时间】:2017-09-19 10:18:33
【问题描述】:

我有各种微服务。我已经使用 JWT 实现了安全性。每个服务都通过所有服务共享的密钥来验证 JWT 令牌。

是否可以在所有微服务之间为 JWT 共享相同的签名密钥?

我无法在 API 网关上实现这一点,因为我必须使用某些库,这些库需要在每个微服务中触发 Spring Security。

【问题讨论】:

  • 使密钥无效时会发生什么?
  • @ConstantinGALBENU 我正在使用配置服务。如果我使密钥无效,我会在配置中更新 git 上的新密钥。所有其他服务都会获得最新的密钥以继续该过程。
  • 你是否使用了spring-security-oauth,如果是,那么你可以使用auth server暴露的/oauth/token_key端点
  • 我正在使用 Spring Security,但我没有使用 OAuth。我必须使用 JWT。

标签: security spring-security jwt spring-cloud microservices


【解决方案1】:

是的,您需要共享密钥才能让 JWT 安全/正确地运行。

我建议使用公私钥签名方法并按值传递 JWT。这意味着您将获得一个只有您的网关需要知道的私有签名密钥和一个公共验证密钥。

然后,您可以将验证密钥分发给您的所有微服务。这可以是您通过部署执行的操作,或者您的微服务可以使用某种刷新周期并将您的签名密钥与网关一起发布。前者更安全,后者更擅长自愈。

这可能有用:JWK

【讨论】:

  • 感谢您的信息。我对几点感到困惑。我有一个 UserService(只有一个生成令牌的服务),它负责为登录请求创建 JWT 令牌以及处理刷新令牌场景。我只需要验证所有其他微服务中的签名令牌。我不确定如何适应其中的公私密钥概念。如果您有任何参考,请分享。
  • 我使用 JWK 生成公钥和私钥。你能告诉我如何使用这些密钥来签署 JWT 吗? JWT 库期望“密钥”作为参数。 JwtBuilder signWith(SignatureAlgorithm alg, Key key) 注意:我使用的是 jjwt 库。
  • @NitishBhardwaj 不太清楚如何使用您的特定库,但通过快速搜索,这可能会提供一些线索:github.com/jwtk/jjwt/issues/131
  • 感谢@LukeMcGegor。
猜你喜欢
  • 2016-03-07
  • 2020-07-31
  • 2023-04-09
  • 2018-04-05
  • 2021-04-10
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
相关资源
最近更新 更多