В настоящее время я создаю приложение Java Spring, которое работает с Spring Security JWT. Везде я смотрю и читаю про "секретную строку", там написано должно быть изменено в производстве. Нравится эта строка в моем приложение.свойства: security.jwt.secret = "this-is-a-512-bit-key-used-for-signing-jwt-tokens-that-should-be-changed-production"
А также в вопросе stackoverflow, который вроде как связан с этим здесь: Как включить секрет jwt в application.yaml для Java Spring.
Мой вопрос: какой должна быть эта строка в производстве? Должен ли я генерировать это где-то в классе SecurityConfig? Или мне следует сгенерировать 512-битную строку и просто вставить ее в файл application.properties?
Заранее спасибо.




Один из способов изменить свойства приложения Spring — использовать Spring Cloud Config. В основном ваша конфигурация находится в репозитории GitHub, и как только вы изменяете, облачный сервер конфигурации Spring распространяет ее на другие приложения, ссылаясь на нее через application.properties.
Я поделюсь, как это было сделано в нашем приложении, которое я считаю одним из стандартных способов хранения учетных данных. Могут быть и альтернативные пути.
Поскольку у нас есть разные серверы хранилища в разных средах, мы можем хранить и изменять токен во время выполнения и обновлять приложение.
Что касается генерации токена jwt, он должен иметь определенный срок действия и периодически обновляться.
Секреты не следует добавлять в ваш обычный файл application.properties, потому что это будет проверено в вашей системе контроля версий. Существуют различные способы внешняя конфигурация, но проще всего определить переменные среды.
В вашем случае вам понадобится переменная среды с именем SECURITY_JWT_SECRET, и Spring Boot подберет ее автоматически.
Любая идея, где я должен хранить такую переменную среды? Я разворачиваю приложение на Heroku, мне его потом туда ставить?
Да. См. devcenter.heroku.com/articles/…
Прошло некоторое время с тех пор, как я в последний раз делал это, но, если я правильно помню, секрет для каждого экземпляра, то есть вы создаете строку и вставляете ее в файл свойств. По сути, у JWT есть подпись, зашифрованная с помощью секрета, и если у вас нет секрета, вы не можете его расшифровать. Он используется для проверки содержимого JWT.