Безопасное хранение секретов приложения во время разработки
Совет
Это содержимое является фрагментом из электронной книги, архитектуры микрослужб .NET для контейнерных приложений .NET, доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.
Для подключения к защищенным ресурсам и другим службам приложения ASP.NET Core обычно используют строки подключения, пароли или другие учетные данные, содержащие конфиденциальные сведения. Эти конфиденциальные сведения называются секреты. Мы рекомендуем не включать секреты в исходный код и ни в коем случае не хранить секреты в системе управления версиями. Лучше использовать модель конфигурации ASP.NET Core для чтения секретов из более безопасных мест.
Следует отличать секреты для доступа к ресурсам в среде разработки и промежуточной среде от секретов для доступа к ресурсам в рабочей среде. Это разные наборы секретов, которые используют разные пользователи. Секреты, используемые на стадии разработки, как правило, хранятся в переменных среды или в менеджере секретов ASP.NET Core. Для большей безопасности в рабочих средах микрослужбы могут хранить секреты в хранилище Azure Key Vault.
Хранение секретов в переменных среды
Чтобы хранить секреты отдельно от исходного кода, разработчики могут установить строки секретов в качестве переменных среды на компьютерах, использующихся для разработки. При использовании переменных среды для хранения секретов с иерархическими именами, например, вложенными в разделы конфигурации, необходимо создать имя для переменных среды, чтобы включить полную иерархию разделов, разделенных двоеточием (:).
Например, если установить для переменной среды Logging:LogLevel:Default
значение Debug
, это будет соответствовать конфигурации из следующего файла JSON:
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
}
}
Чтобы получить доступ к этим значениям из переменных среды, приложению просто нужно вызвать AddEnvironmentVariables
его ConfigurationBuilder
при создании IConfigurationRoot
объекта.
Примечание.
Переменные среды обычно хранятся в виде обычного текста, поэтому если компьютер или процесс с переменными среды скомпрометирован, значения переменной среды будут видны.
Хранение секретов с помощью диспетчера секретов ASP.NET Core
Менеджер секретов ASP.NET Core — это еще один инструмент для хранения секретов отдельно от исходного кода при разработке. Для работы с диспетчером секретов установите пакет Microsoft.Extensions.Configuration.SecretManager в файле проекта. Установив и восстановив эту зависимость, можно указать значение секретов в командной строке с помощью команды dotnet user-secrets
. Секреты будут храниться в файле JSON в каталоге профилей пользователей (в зависимости от ОС), отдельно от исходного кода.
Секреты, заданные диспетчером секретов, упорядочиваются свойством UserSecretsId
в проекте, использующем эти секреты. Поэтому обязательно задайте свойство UserSecretsId в файле проекта, как показано в следующем фрагменте кода. Значением по умолчанию является GUID, назначенный Visual Studio, но фактическая строка не важна, если она уникальна на вашем компьютере.
<PropertyGroup>
<UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>
Использование секретов, хранящихся в диспетчере секретов в приложении, выполняется путем вызова AddUserSecrets<T>
ConfigurationBuilder
экземпляра для включения секретов для приложения в конфигурацию. Универсальный параметр T
должен быть типом из сборки, к которому был применен UserSecretId. Как правило, использование AddUserSecrets<Startup>
хорошо.
AddUserSecrets<Startup>()
относится к параметрам по умолчанию для среды разработки, если в Program.cs используется метод CreateDefaultBuilder
.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по