我有一个 ASP.Net C# 应用程序,它需要每 5 分钟使用 WebServices 连接到外部 API。
外部 Web 服务的要求如下:
- 需要用户名和密码
- 我必须在每个网络服务请求中传输用户名和密码
- 密码每 90 天到期一次,必须在到期日之前更改
- 密码不能手动(人工)更改,我的应用程序必须连接到单独的密码更改 Web 服务才能更改密码。
- 我的应用程序必须根据一组规则生成每个新密码。
- 密码永远不能重复使用。
- 需要 SSL、证书和防火墙 IP 限制
我已经建立了所有以前的,但我目前有一个问题。存储当前和历史密码的最佳做法是什么?
显然存储明文密码是一个不好的解决方案。我需要能够让我的网络服务读取密码并在每个请求中传输它。我还需要能够访问所有历史密码,以确保我新生成的密码不重复。
理想情况下,我想将每个(加密的)密码存储在我的数据库中,并在需要调用 web 服务时对其进行解密。是否有我应该遵循的最佳实践?我应该使用 Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric(..) 加密每个密码吗?
注意:不幸的是,我无权更改外部 API 的运行方式。我必须遵守提供的规则。