Безопасное хранение секретов приложений для приложения Blazor Webassembly

Я ищу способ безопасного хранения секретов приложения в приложении веб-сборки Blazor. Подробные сведения о приложении на стороне сервера можно найти в документации MSDN ниже.

https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1&tabs=windows

Как мы можем использовать эти секреты для приложения Blazor WebAssembly, которое полностью работает в клиентском браузере?

Мой базовый сценарий заключается в том, что пароли, ключ продукта (лицензионный ключ) не должны попадать в код приложения. Например, мы загружаем лицензию внутри статического основного метода Program.cs.

 public class Program
    {
        public static async Task Main(string[] args)
        {
            //want to access the product key here and need to avoid hardcoding
            SomeThirdPartyLibrary.RegisterLicense("product-key");
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");

            builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

            await builder.Build().RunAsync();
        }

Я искал в документации по Blazor и не смог найти никаких подробностей. Пожалуйста, помогите мне найти рекомендуемый способ решения этой проблемы в веб-сборке Blazor.

(для серверной стороны у нас есть множество вариантов, но для клиентской стороны, что может быть рекомендованным способом)

2 ответа

Если вы храните его на клиенте, это небезопасно.

Существует экспериментальный пакет MS nuget, который утверждает, что делает хранилище безопасным путем его шифрования - Microsoft.AspNetCore.ProtectedBrowserStorage.

Вы можете прочитать, как его использовать, здесь https://docs.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1

Вы можете использовать конфигурацию памяти, используя MemoryConfigurationSource

пример:

var appsettings = new Dictionary<string, string>()
{
   { "API:Key", "12345" }
};
var config = new MemoryConfigurationSource(InitialData = appsettings);
builder.Configuration.Add(memoryConfig);

затем все, что вы хотите использовать, просто конфигурацию @inject (на страницах razor) или в программе вашего класса, которая будет выглядеть так:

builder.Configuration.GetValue<string>("API:Key")
Другие вопросы по тегам