Содержание
Ещё один способ конфигурации приложения ASP.NET Core – использование секретов пользователя. Под термином «секрет пользователя» понимаются любые конфиденциальные данные. Например, когда мы разрабатываем приложение, то нам может потребоваться логины и пароли пользователей базы данных, наделенных различными правами, пароли и ключи доступа к сторонним API и так далее – это всё относится к секретам пользователя. Такие данные, обычно, используются только разработчиком приложения на его рабочем месте, а для пользователей уже устанавливаются свои права, пароли и так далее. И хоть мы можем хранить секреты пользователей, например, в файле appsettings.json
или, даже, в исходном коде приложения – делать так категорически не рекомендуется.
В Visual Studio для хранения секретов пользователя используется специальное средство под названием Secret Manager. Менеджер секретов позволяет сохранять конфиденциальные данные отдельно от приложения и сохраненные таким образом данные будут доступны только на конкретном рабочем месте. При этом менеджер секретов сохраняет все данные в открытом виде, поэтому его не стоит рассматривать, как защищенное хранилище, использующее шифрование данных.
Использование PowerShell для управления секретами
Процесс работы с секретами пользователей в PowerShell начинается с инициализации хранилища секретов для проекта. Для этого необходимо выполнить команду:
dotnet user-secrets init
В результате выполнения этой команды для нашего проекта будет создан UserSecretsId
, который представляет собой GUID уникальный для каждого проекта.
Увидеть этот параметр можно в файле проекта (файл *.cproj):
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>9ccd59b5-5ded-4060-9527-ecb626231a50</UserSecretsId> </PropertyGroup> </Project>
Теперь можно добавить в хранилище какую-либо настройку. Чтобы добавить новую настройку в хранилище секретов необходимо выполнить команду:
dotnet user-secrets set "[ключ]" "[значение]"
например, команда для добавления строки подключения к БД будет выглядеть следующим образом:
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Data Source=tasks.sqlite"
Выполнение этой команды приведет к тому, что в папке C:\Users\%UserName%\AppData\Roaming\Microsoft\UserSecrets\
появится новая папка с названием соответствующим ранее созданному UserSecretsId
в которой будет размещен файл secrets.json
, содержащий добавленные настройки приложения. Также, для управления секретами в PowerShell могут использоваться команды, представленные в таблице
Команда в PowerShell | Описание |
dotnet user-secrets list |
Выводит список всех секретов пользователей |
dotnet user-secrets remove "[key]" |
Удаляет из хранилища ключ с именем key |
dotnet user-secrets clear |
Полностью очищает хранилище секретов проекта |
Управление секретами в Visual Studio
Для инициализации хранилища и добавления в него секретов можно также воспользоваться пунктом меню проекта «Управление секретами пользователей»
Клик по этому пункту меню приведет к инициализации хранилища секретов для проекта, а в редакторе мы увидим пустой файл secrets.json
. Бонусом использования этого способа работу с секретами пользователей можно считать, что в редакторе Visual Studio мы можем оформить настройки проекта, используя иерархическую структуру. Например, для нашего проекта сделать содержимое файла secrets.json аналогичным файлу appsettings.json. При этом чтение настроек в приложении никак не изменится.
Использование секретов в приложении
По умолчанию, для среды с именем «Development» уже добавлен провайдер для работы с секретами пользователей, поэтому мы можем сразу воспользоваться настройками из secrets.json
точно также, как и прочими настройками приложения.
При этом, стоит ещё раз отметить, что файл secrets.json используется только на компьютере разработчика и не разворачивается вместе с приложением, то есть, при публикации приложения вам необходимо будет предусмотреть использование других источников конфигурации, в случае, если конечному пользователю потребуется для работы настройка с именем, используемым в хранилище секретов.
Итого
Для использования в приложении ASP.NET Core Web API конфиденциальных данных (паролей, строк подключения и т.д.) рекомендуется использование секретов пользователей. Файл секретов пользователя — это обычный json-файл, который создается отдельно от проекта и не разворачивается вместе с приложением. Использование такого подхода позволяет избежать случайного опубликования конфиденциальных данных, например, при загрузке кода проекта в публичный репозиторий.