Почему бы не генерировать секретный ключ при каждом запуске Flask?

При использовании сеансов Flask требуется секретный ключ. В каждом примере, который я видел, секретный ключ как-то генерируется и затем сохраняется либо в исходном коде, либо в файле конфигурации.

Какая причина хранить его постоянно? Почему бы просто не сгенерировать его при запуске приложения?

app.secret_key = os.urandom(50)

1 ответ

Решение

Секретный ключ используется для подписи cookie сеанса. Если бы вам пришлось перезапустить приложение и заново сгенерировать ключ, все существующие сеансы были бы признаны недействительными. Это, вероятно, не то, что вы хотите (или, по крайней мере, не правильный способ аннулировать сессии). Аналогичный случай может быть сделан для всего, что зависит от секретного ключа, такого как токены, сгенерированные его опасным для предоставления URL-адресов пароля для сброса (например).

Приложение может быть необходимо перезапустить из-за сбоя, или из-за перезагрузки сервера, или из-за того, что вы выдвигаете исправление ошибки или новую функцию, или из-за того, что сервер, который вы используете, порождает новые процессы и т. Д. Поэтому вы не можете полагаться на на сервере быть вечно.

Стандартная практика заключается в том, чтобы какой-то одноразовый ключ был зафиксирован в репозитории (чтобы там было что- то для машин-разработчиков), а затем устанавливал ключ в локальной конфигурации при развертывании. Таким образом, ключ не протекает и не нуждается в регенерации.

Существует также случай запуска вторичных систем, которые зависят от контекста приложения, например Celery для выполнения фоновых задач или нескольких экземпляров приложения с балансировкой нагрузки. Если каждый запущенный экземпляр приложения имеет разные настройки, в некоторых случаях они могут работать неправильно.

Другие вопросы по тегам