我正在尝试创建一个桌面应用程序,它将向我正在开发的 Web 服务发送更新。
理想情况下,应用程序只需配置一次并部署到网络共享。在配置应用程序时,用户将输入用于在 Web 服务中进行身份验证的密码。之后,将创建一个令牌以用于将来的连接。
这将允许任何有权访问网络共享的计算机(即使它不是配置应用程序的计算机)只运行应用程序(它将连接到 Web 服务)而无需输入任何凭据(因为令牌已已保存)。
我知道将其存储在客户端永远不会完全安全,但我想让某人尽可能难以访问明文令牌。
我正在寻找一个最好不依赖于任何操作系统资源的答案(因为应用程序可以从不同的设备执行)。
假设我可以完全控制应用程序和网络服务器
我正在使用 C# 开发控制台应用程序,但我认为这更多是一个理论问题(与任何特定语言无关)
以下是我尝试/考虑过的一些事情:
使用 C# 之类的东西序列化令牌SecureString
并将其存储在文件中:这是我最好的方法。但显然,如果有人获得了对密钥文件的访问权限,就很容易逆转。
这个答案建议使用Windows 数据保护 API (DPAPI)(在 C# 中,ProtectedData
类),但显然,这将只允许最初保存凭据的用户访问它们,这将不起作用,因为我必须访问受保护的来自多个用户/设备的数据。
将令牌作为参数传递给应用程序:这只是改变了我将要存储令牌的位置(例如,在调用程序的批处理文件或操作系统任务上),但我认为它不再起作用安全的。
饮歌长啸
繁星淼淼
慕少森
相关分类