[英]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.