在javaspring,如何最好"change secret in production"?

In java spring, how to best "change secret in production"?

我目前正在创建一个与 spring 安全 JWT 一起工作的 Java Spring 应用程序。我到处查看和阅读“秘密字符串”,它说应该 在生产中更改 。就像我的 application.properties 中的这一行:security.jwt.secret="this-is-a-512-bit-key-used-for-signing-jwt-tokens-that-should-be-changed-production"

以及在 Whosebug 问题中与此相关的问题:

我的问题是,该字符串在生产中应该变成什么?我应该在 SecurityConfig class 的某处生成它吗?或者我应该生成一个 512 位的字符串并将其粘贴到 application.properties 文件中吗?

提前致谢。

更改 spring 应用程序属性的一种方法是使用 Spring Cloud Config。基本上,您的配置位于 GitHub 存储库中,一旦您修改,Spring 云配置服务器就会将其传播到通过 application.properties.

引用它的其他应用程序

https://cloud.spring.io/spring-cloud-config/reference/html/

我将分享它是如何在我们的应用程序中完成的,我认为这是存储凭据的标准方式之一。 可能还有其他方法。

  1. 在属性中存储令牌或凭据并不理想
  2. 我们可以将令牌外部化到 Vault 或配置服务器中
  3. 当服务器启动时spring应用程序可以获取属性
  4. 对保管库的访问受到控制

由于我们在不同环境中拥有不同的保管库服务器,因此我们可以在运行时存储和更改令牌并刷新应用程序。

关于生成 jwt 令牌,它应该有一些到期时间并定期刷新。

Secrets 不应添加到您的常规 application.properties 文件中,因为这会被检查到您的版本控制系统中。 externalize configuration 有多种方法,但最简单的通常是定义环境变量。

在您的情况下,您需要一个名为 SECURITY_JWT_SECRET 的环境变量,Spring Boot 会自动选择它。