我正在开发一个与第三方API集成的.NET核心控制台应用程序,需要在API请求中传递API密钥。问:我应该在控制台应用程序中存储API密钥?在常规的.NET控制台应用程序中,我通常将API密钥存储在app.config
中,并使用Aspnet_regiis
加密密钥。但不确定如何在.NET核心控制台应用程序中实现?
我正在开发一个与第三方API集成的.NET核心控制台应用程序,需要在API请求中传递API密钥。问:我应该在控制台应用程序中存储API密钥?在常规的.NET控制台应用程序中,我通常将API密钥存储在app.config
中,并使用Aspnet_regiis
加密密钥。但不确定如何在.NET核心控制台应用程序中实现?
您可以考虑以下几点:
为不同的环境发行单独的密钥(这样就可以在不影响其他环境的情况下使泄露的密钥失效/取消)。
加密存储密钥 - 例如 - 在操作系统提供的密钥库中 [https://learn.microsoft.com/en-us/dotnet/standard/security/cryptography-model]。(这意味着它们不会“随意留在那里”供路人观看。)
从控制台应用程序中删除检索密钥的代码,可能将其移到普通开发人员无法访问的简单服务或库中。(一种分离级别。)
要在应用程序中嵌入信息,请考虑使用资源文件 [https://learn.microsoft.com/en-us/dotnet/framework/resources/creating-resource-files-for-desktop-apps]
开发中的安全性
在本地开发中,您可以使用Secrets Manager Tool(仅在开发中使用,不要在生产中使用)。该工具允许您将敏感数据存储在您的机器上,项目树之外。
这个工具并不是非常安全,密钥也没有加密,但它提供了一种简单的方法来避免将秘密存储在项目配置文件中,并且需要记住将它们添加到源代码控制的忽略列表中。
生产环境中的安全性
一个常见的方法是将秘密存储在外部保险库中。
如果你的应用程序托管在Azure上,Azure还提供了一种更安全的选择:Azure Key Vault。
Key Vault是一个云托管的服务,用于管理秘密,只有通过加密通道授权的应用程序才能访问。
建议不要将加密密钥存储在.NET控制台应用程序中。更理想的做法是将密钥与应用程序分开,使用开发模式下的秘密管理工具进行存储,并像之前提到的Azure KeyVault一样,在生产环境中查看服务。
请参阅有关应用程序机密和配置的链接以及为什么我们需要一个工具来管理它https://dev.to/dotnet/how-to-store-app-secrets-for-your-asp-net-core-project-2j5b,以获取详细说明。