c# - 在 .NET Standard 跨平台应用程序中安全地存储密钥
问题描述
我正在开发一个 C# PowerShell 模块,它将成为一些服务 REST API 的简单包装器。我想以 PowerShell Standard / .NET Standard 为目标并使模块在所有受支持的平台上可用。
对于此应用,身份验证需要 API 令牌,由用户在服务网站上颁发。每次打开会话时输入密钥会非常不方便,因此我需要一些方法来将 API 密钥安全地存储在用户配置文件中。
问题是 - 我找不到一种简单的方法来加密具有透明跨平台支持的数据。最初,我想使用SecureString
,但它 (a)已弃用并且 (b) 在 Linux 上似乎没有很好的支持。在一个完美的世界中,我希望有一些类似于 Windows 加密的机制——用户证书加密 API 密钥,并将结果放在用户文件夹中的文本文件中。
这不是财务或关键任务应用程序,不需要一流的安全性,但仍然热衷于我的主文件夹中的纯文本秘密让我感到紧张。是的,我在和你说话,AWS 开发工具包作者 :)
解决方案
我的第一个想法是:“只需将密钥保存到 ENV 变量......”但如果我正确理解了 OP 的问题,即使在 OP 的机器上也需要限制未经授权的读取这个秘密。
我可以看到的一个选项是创建一个文件夹(或者可能是文件),并仅授予一个特定用户的访问权限。最终,可以创建新的用户帐户,该帐户将用于在 powershell 中运行代码,并授予该新用户读取机密文件的独占权限。这将防止一些从 OP 帐户运行的第 3 方程序读取机密文件。
推荐阅读
- mysql - 如何在 MySQL 中生成矩阵报告
- algorithm - 无法理解 MAX-CUT 问题
- c# - 带有格式的 Html.TextBoxFor 不起作用
- jsf - 我如何将 primefaces tabview 动态属性应用于单个选项卡
- laravel - 具有多态性的一对多和简单的一对多关系的模型
- qt - Windows 10 上的 Anaconda3 PATH 变量问题
- excel - 使用 VBA 从 Excel 写入访问多列组合框字段
- keras - Keras - 使用预训练词嵌入的问题
- javascript - 如何使用输入的 handleChange 避免“无参数重新分配”规则?
- amazon-ec2 - AWS - 可以在 1 个 EC2 上使用 Docker Swarm(用于培训)?