Секреты пользователей

Ещё один способ конфигурации приложения 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-файл, который создается отдельно от проекта и не разворачивается вместе с приложением. Использование такого подхода позволяет избежать случайного опубликования конфиденциальных данных, например, при загрузке кода проекта в публичный репозиторий.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии