【问题标题】:Safe storage of app secrets for Blazor Webassembly app安全存储 Blazor Webassembly 应用的应用机密
【发布时间】:2020-10-23 06:27:13
【问题描述】:

我正在寻找在 blazor webassembly 应用程序中安全存储应用程序机密的方法。我们可以在下面的 MSDN 文档中找到服务器端应用程序的详细信息。

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

我们如何将这些秘密用于完全在客户端浏览器中运行的 Blazor WebAssembly 应用程序?

我的基本场景是,需要将密码、产品密钥(许可密钥)信息保留在应用程序代码之外。例如,我们在 Program.cs 的静态 main 方法中加载 license。

https://i.stack.imgur.com/kCrV1.png

 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 webassembly 中找到解决此问题的推荐方法。

(对于服务器端,我们有多种选择,但对于客户端,可能是推荐的方式)

【问题讨论】:

  • 你想让谁知道?用户?
  • 我的场景是,想从 Program.cs 的静态 main 方法中的 secret 文件中获取密码。为此,我正在检查多种方法,但我可以在服务器端轻松完成,但不能在客户端完成。
  • 如果我的要求是错误的,那么请向我建议将应用程序机密与应用程序代码隔离开的推荐方法。任何人,请帮助我。

标签: blazor blazor-webassembly secret-manager


【解决方案1】:

如果存储在客户端,不安全。

有一个实验性的 MS nuget 包声称通过加密来确保存储安全 - Microsoft.AspNetCore.ProtectedBrowserStorage

你可以在这里阅读如何使用它https://docs.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1

【讨论】:

  • 谢谢。在初始化 blazor 之前,我需要访问 program.cs 中的详细信息。有什么帮助吗?
  • 根据链接,Microsoft.AspNetCore.ProtectedBrowserStorage 仅在 Blazor 服务器项目中受支持。
  • 但是您将如何调用数据库服务器?
  • @Toolkit 你永远不要让客户端访问数据库服务器,这是一个安全漏洞。客户端应该与 API 服务器通信,并且应该连接到服务器。
【解决方案2】:

你可以通过MemoryConfigurationSource来使用内存配置

示例:

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

然后无论你想使用什么,只需 @inject 配置(在剃须刀页面中)或在你的类程序中,如下所示:

builder.Configuration.GetValue<string>("API:Key")

【讨论】:

  • 这样安全吗?黑客不能访问 MemoryConfigurationSource 中保存的值吗?
  • There's no .NET server-side dependency. The app is fully functioning after it's downloaded to the client. 这意味着应用程序将调用数据库服务器,您可以看到流量。我假设它不安全
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 2021-04-24
  • 2022-12-12
  • 2020-12-05
  • 2019-04-01
相关资源
最近更新 更多