问:在 Blazor WASM 应用程序中存储 api 密钥的最佳方式是什么?

Q: What is the best way to store api keys in a Blazor WASM application?

我使用的 blazor Web 程序集应用程序不是 asp 为个人网站托管的网络核心。本网站与 Contentful CMS 集成,需要 api 键、预览键和 space id。我目前将这些存储在我自己的 appsettings.json 中的 www/root 中,并通过将 IConfiguration 注入我的服务来访问它们,然后通过 GetSection 方法访问这些值。

它们采用以下形式:

    "DeliveryApiKey": "A",
    "ManagementApiKey": "not used",
    "PreviewApiKey": "B",
    "SpaceId": "C",```

这对于 运行 在本地来说没问题,但经过一些在线研究后,如果部署和反编译 dll,这些密钥将对用户可读和可见。

使用 Blazor Web 程序集应用程序存储 api 密钥的最佳方式是什么? 我想知道我是否应该创建一个 asp net core hosted blazor 项目,它会给我一个服务器和共享项目,但如果我要部署它,我不确定这是否适用于 github 操作如果我要单独部署项目的 'server' 端,请使用 netlify。 最佳行动方案是什么?

*编辑,这就是我使用这些密钥访问内容丰富的 CDA 的方式。这是基于文档的方式。

        {
            var apiKey = _configuration.GetSection("ContentfulOptions").GetSection("DeliveryApiKey").Value;
            var previewKey = _configuration.GetSection("ContentfulOptions").GetSection("PreviewApiKey").Value;
            var spaceid = _configuration.GetSection("ContentfulOptions").GetSection("SpaceId").Value;
            var httpClient = new HttpClient();
            var client = new ContentfulClient(httpClient, apiKey, previewKey, spaceid);
            return client;
        }

一般来说,如果客户端(Web 浏览器、桌面应用程序等)上有任何 secret(API 密钥、密码等),则无论媒介是什么 - 包括 Blazor WASM - 在这样的 secret 被泄露之前,这只是一个持久性问题。加密帮助不大,因为您仍然需要实际的 clear-text 版本 在客户端上的某些时候 ,以便于访问。

我强烈建议保留任何敏感信息 server-side。在 Blazor WASM 应用程序的情况下,这意味着可以从客户端访问辅助 Web API 等(是的,这仍然是一个安全风险,但更典型的是 - 安全 APIs 是已解决的问题,例如使用身份框架和类似技术)。

我仍然建议对任何真正敏感的内容使用 Key Vault 服务,即使是 server-side 访问(无论如何,这是密钥保管库的主要用例)——这比存储密钥要好得多本地,嵌入应用程序,致力于 GitHub,等

看看 this video(我保证我不会从 Azure 销售中收取佣金,我只是真的认为这是一个很好的解决方案)。该视频以 Blazor Server 应用为特色,但该技术很容易适应调用 Web API.

的 Blazor WASM 应用

想通了问题回来提供答案。我决定为该项目创建一个 Web api,并编写服务来使用那些执行查询 ContentfulCDA 的肮脏工作的服务。我所要做的就是将它反序列化为我喜欢的任何东西。这似乎是最好的前进方式,因为 api 键将通过 appsettings.json.

在客户端可见

此外,显然 appsettings.json 在 blazor wasm 项目中无法访问环境变量,因为它们没有暴露给浏览器,所以我使用 EV 的想法行不通 - 所以网络 api 是最好的前进方式,而 Azure Key Vault 将是保护这些密钥的下一步。

帝舵