c# - 如何在 Windows 和 Linux 上正确存储 .NET Core 非交互式应用程序凭据?
问题描述
我需要为我的应用程序存储凭据。我读过用代码存储它们是一种非常糟糕的做法。
我知道,DPAPI 就是为它而生的,但是如何在像 Ubuntu 这样的 Linux 上使用它呢?所以——如果我可以让 DPAPI 在 Linux 上工作而不用花一整天的时间——这将是我的第一选择。
然后是穷人的安全 - 目标机器上的文件。所以 - 不是与源;)该文件位于只有管理员可以访问的目录中,因此它与主机本身一样安全。我也可以在我的 Windows 开发机器上拥有该文件,它和我的机器一样安全。
告诉我为什么文件不好?;)
解决方案
我需要为我的应用程序存储凭据。
嗯嗯。
我读过用代码存储它们是一种非常糟糕的做法。
不是“使用代码”,而是在代码中:即作为字符串文字烘焙到您的可执行文件中。
我知道,DPAPI 就是为此而生的
是的。
但是如何在像 Ubuntu 这样的 Linux 上使用它?
有困难。
所以——如果我可以让 DPAPI 在 Linux 上工作而不用花一整天的时间——这将是我的第一选择。
你不能。DPAPI是一个 Windows应用程序。
然后是穷人的安全 - 目标机器上的文件。所以 - 不是与源
至少在 Linux 上,您可以利用更简单的文件系统安全模型来保护文件不被其他用户访问而无需太多努力(即chmod
,与您需要处理 DACL 的 Windows 相比(警告:客观上,DACL 仍然很远,远优于chmod
. 考虑使用 SELinux 在 Windows 之外获取 DACL)。
该文件位于只有管理员可以访问的目录中,因此它与主机本身一样安全。
值得商榷。
告诉我为什么文件不好?;)
我不能。你还没有告诉我们有关文件的任何信息。
更好的解决方案:利用任何可用的硬件 TPM 来存储加密密钥:https ://wiki.archlinux.org/index.php/Trusted_Platform_Module
推荐阅读
- javascript - 如何使用 JavaScript 在特定单选按钮上应用条件
- terraform - 如何修复 terraform 远程状态和本地状态不匹配
- java - 用不同长度的行在Java中读取文件时出现问题
- javascript - 移动 Chrome 滚动顶部/动画不滚动
- laravel - 类 stdClass 的对象无法转换为字符串(查看:C:\wamp64\www\Application 1\resources\views\admin\soutenance\themeValide.blade.php)
- python - 为什么即使传递了错误的代理主机名,librdkafka 也不会抛出任何错误/异常?
- javascript - 如何创建自动递增*包括另一个输入*按钮?
- azure - 具有特定路径的 Databricks Notebook 上的 DevOps
- spring - ResponseEntityExceptionHandler.handleException 的 Spring AOP 建议
- ios - iOS Swift XCTest 从短信访问 OTP