首页 > 解决方案 > 在 .NET Standard 跨平台应用程序中安全地存储密钥

问题描述

我正在开发一个 C# PowerShell 模块,它将成为一些服务 REST API 的简单包装器。我想以 PowerShell Standard / .NET Standard 为目标并使模块在所有受支持的平台上可用。

对于此应用,身份验证需要 API 令牌,由用户在服务网站上颁发。每次打开会话时输入密钥会非常不方便,因此我需要一些方法来将 API 密钥安全地存储在用户配置文件中。

问题是 - 我找不到一种简单的方法来加密具有透明跨平台支持的数据。最初,我想使用SecureString,但它 (a)已弃用并且 (b) 在 Linux 上似乎没有很好的支持。在一个完美的世界中,我希望有一些类似于 Windows 加密的机制——用户证书加密 API 密钥,并将结果放在用户文件夹中的文本文件中。

这不是财务或关键任务应用程序,不需要一流的安全性,但仍然热衷于我的主文件夹中的纯文本秘密让我感到紧张。是的,我在和你说话,AWS 开发工具包作者 :)

标签: c#.netpowershellcross-platformsecurestring

解决方案


我的第一个想法是:“只需将密钥保存到 ENV 变量......”但如果我正确理解了 OP 的问题,即使在 OP 的机器上也需要限制未经授权的读取这个秘密。

我可以看到的一个选项是创建一个文件夹(或者可能是文件),并仅授予一个特定用户的访问权限。最终,可以创建新的用户帐户,该帐户将用于在 powershell 中运行代码,并授予该新用户读取机密文件的独占权限。这将防止一些从 OP 帐户运行的第 3 方程序读取机密文件。


推荐阅读