繁体   English   中英

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

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

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

它们采用以下形式:

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

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

使用 blazor web 程序集存储 api 密钥的最佳方法是什么? 我想知道我是否应该创建一个 asp.net 核心托管 blazor 项目,它会给我一个服务器和共享项目,但如果我要部署它,我不确定如果我单独部署它是否适用于 github 操作和.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;
        }

一般来说,如果任何秘密(API 密钥、密码等)在客户端(Web 浏览器、桌面应用程序等)上可用,无论介质是什么——包括 Blazor WASM——在此类秘密被公开之前只是一个持久性问题妥协。 加密帮助不大,因为在客户端的某个时刻您仍然需要实际的明文版本,以便于访问。

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

我仍然建议对任何真正敏感的事情使用 Key Vault 服务,即使是服务器端访问(无论如何,这是 Key Vault 的主要用例)——这比在本地存储密钥、嵌入到应用程序中要好得多,致力于GitHub等

看看这个视频(我 promise 我不从 Azure 的销售中赚取佣金,我只是真的认为这是一个很好的解决方案)。 该视频以 Blazor 服务器应用程序为特色,但该技术很容易适用于调用 Web API 的 Blazor WASM 应用程序。

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

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

帝舵

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM