我有一个c# CLI应用程序,需要在Windows上(使用相同的域用户)多次执行,可能在多个服务器上,在常规夜间处理的几分钟内。此应用程序需要来自身份验证服务器的承载令牌(有效期为一小时),以便访问本地网络上的服务。我已经实现了使用Http请求请求承载令牌的逻辑。
有一个问题,在DNS中有一个反ddos措施,这意味着在几分钟的窗口中,当这个应用程序被执行多次时,许多请求失败,因此应用程序失败。显而易见的解决方案是在调用之间以某种方式保留单个令牌,并在可用时使用它。否则重新发出http请求。
是否有一种安全的方法将这样的令牌存储在网络共享/服务上,这样它就只能被这个应用程序和/或呼叫用户访问?我不想在文件中留下明文承载令牌,因为这会给系统带来安全风险。
我发现了一些。net Core api,可以使用当前用户的一些信息来加密数据/文件,这意味着只有用户可以解密它。然而,它不限制每个应用程序的访问,所以有人可以把他们自己的应用程序放在我们的任务框架中,调用相同的API并解密令牌,如果他们想要的话。看起来不太安全。
在Windows上,您可以使用ProtectedData
类来加密(Protect
)和解密(UnProtect
)数据
您可以使用DataProtectionScope.CurrentUser
,这样,只有运行应用程序的用户才能解密。