Безопасное хранение секретов приложений для приложения 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")