Поддерживает ли. Net Core пользовательские секреты для каждой среды? - PullRequest
1 голос
/ 27 февраля 2020

Допустим, у меня есть строка подключения для среды разработки, заданная в appsettings.Development.json, и строка подключения для среды промежуточного хранения, указанная в appsettings.Staging.json

Все, что мне нужно сделать для переключения между разработкой и этапом, - это перейти к Вкладка «Отладка Visual Studio» в свойствах проекта и изменение значения переменной среды ASPNETCORE_ENVIRONMENT.

Теперь, конечно, я не хочу иметь строку подключения в appsettings.*.json по соображениям безопасности. Поэтому я переместил его в User Secrets.

Проблема в том, что, похоже, существует только один файл secrets.json, который используется всеми средами. Там нет secrets.Development.json или secrets.Staging.json. Это означает, что после перехода из среды разработки в промежуточную среду через вкладку «Отладка Visual Studio» мне также необходимо вручную изменить строки подключения в secrets.json, что лишает возможности встроенной поддержки сред.

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

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Если вы проверите параметры инструмента с помощью dotnet user-secrets --help, вы увидите, что вы можете указать разные секреты для конфигурации (Debug, Release, любой другой, какой хотите), но не для среды. Что является не плохим решением, если вы об этом думаете.

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

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

0 голосов
/ 27 февраля 2020

Secret Manager (https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1) предназначен исключительно для разработки, а не для какой-либо другой стадии (среды), поскольку он по своей природе небезопасен (локальные секреты разработчика не шифруются). Смотрите предупреждение на странице ссылки. Таким образом, нет необходимости хранить секреты для каждой среды в отношении этого инструмента. В других средах (staging, prod и т. Д. c) Microsoft, скорее всего, направит вас к службе безопасного хранения секретов - Key Vault. Вы можете использовать Secret Manager для секретов разработчиков, а затем сохранять другие среды в хранилище ключей. Я сделал это во многих Asp. Net основных приложениях, и это хорошо работает. Информацию о хранилище ключей см. Здесь: https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-3.1

...