gpt4 book ai didi

c# - "Safely"存储(在客户端) token 以供重用?

转载 作者:行者123 更新时间:2023-11-30 17:29:08 27 4
gpt4 key购买 nike

我正在尝试创建一个桌面应用程序,它将更新发送到我正在开发的网络服务。

理想情况下,应用程序只需配置一次并部署到网络共享。配置应用程序时,用户将输入用于在 Web 服务中进行身份验证的密码。之后,将创建一个 token 以用于将来的连接。

这将允许任何有权访问网络共享的计算机(即使它不是配置应用程序的计算机)只运行应用程序(它将连接到网络服务)而无需输入任何凭据(因为 token 已保存)。

问题是:我应该如何保护这个 token ?

  • 我知道将它存储在客户端永远不会完全安全,但我想让某人尽可能难以访问明文 token 。
  • 我正在寻找一个最好不依赖于任何操作系统资源的答案(因为应用程序可以从不同的设备执行)。
  • 假设我可以完全控制应用程序和网络服务器
  • 我正在使用 C# 开发控制台应用程序,但我认为这更像是一个理论问题(与任何特定语言无关)

以下是我尝试过/考虑过的一些事情:

  • 使用 C# 的 SecureString 之类的东西序列化 token 并将其存储在文件中:这是我遇到的最好的方法。但显然,如果有人获得了对 key 文件的访问权限,则要进行逆转非常简单。

  • This答案建议使用 Windows Data Protection API (DPAPI) (在 C# 中,ProtectedData 类),但显然,这将只允许最初保存凭据的用户访问它们,这是行不通的,因为我必须从多个用户/设备访问 protected 数据。

  • 将 token 作为参数传递给应用程序:这只会改变我要存储 token 的位置(在批处理文件或操作系统任务上)例如调用该程序的程序),但我认为它不会使它更安全。

最佳答案

由于用户不是机器的管理员(这是一个基本假设),所以有很多方法可以对她隐瞒事情。

我的建议是:

  • 确保主应用程序在不同的凭据下运行登录用户,“特殊用户”。
  • 编写另一个终端用户应用程序,仅用于设置,它与该应用程序通信(使用您认为合适的任何进程间通信,TCPIP,无论如何,也许是安全的,但我不会太在意这个)。此应用仅用于收集凭据并将其发送到第一个应用
  • 现在,主应用程序可以在登录用户无法访问的任何地方写入 token ,但我建议使用 protected 数据,因为它非常易于使用

这里有一些图形解释:

enter image description here

由于使用 protected 数据 ( Windows Data Protection ) 加密的数据只能由加密它的 Windows 用户解密,登录用户将无法读取“特殊用户”数据。

关于c# - "Safely"存储(在客户端) token 以供重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com