我的 .NET Core 应用程序需要连接到许多第三方服务。
其中一些服务使用登录/密码凭据,这是一个问题。
应用程序是跨平台 (Windows/Linux) 和“跨数据库”的应用程序(开箱即用,它可以与 MS SQL 和 PostgreSQL 一起使用,并且可以扩展)。实际上,在 Windows 中工作时它是一个 Windows 服务,在 Linux 中工作时它是一个守护进程。
出于可伸缩性的目的,可以运行多个应用程序实例。因此,应用程序设置(包括凭据)存储在数据库中。
问题是如何避免将密码存储为明文。
我不能使用任何特定于平台的解决方案,例如 ProtectedData
或凭证管理器。我也不能存储散列密码,因为它们将由第三方服务验证。理论上,如果数据库服务器具有这种能力,我可以使用一些特定于数据库的代码来加密/解密密码。
有什么建议吗?
最佳答案
您可能无法这样做,因为第三方服务需要更改其实现 - 也许您可以使用非对称加密?您将使用特定方的公钥加密密码并将其存储在数据库中。各方将对其进行解密,然后检查凭据。
但是正如我所说,您可能不能那样做 :) 但我现在知道任何“跨数据库”加密
其他方式 - 也许将密码存储在环境变量中? (windows和linux都支持)
关于c# - 在数据库中存储第三方服务登录名/密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53645809/