首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储和更新外部API密码的最佳实践

问存储和更新外部API密码的最佳实践
EN

Stack Overflow用户
提问于 2011-06-28 22:22:11
回答 3查看 3.1K关注 0票数 10

我有一个ASP.Net C#应用程序,它需要每5分钟使用WebServices连接到外部API。

外部are服务的要求如下:

  • 需要用户名和密码
  • 我必须将用户名和密码与每个webservice请求一起传送。
  • 密码每90天过期一次,必须在有效期前更改。
  • 密码不能手动更改(人工),我的应用程序必须连接到单独的密码更改Webservice以更改密码。
  • 我的应用程序必须根据一组规则生成每个新密码。
  • 密码永远不能重复使用。
  • 需要SSL、证书和防火墙IP限制。

我已经建立了以前的所有,但我现在有一个问题。存储当前和历史密码的最佳实践是什么?

显然,存储明文密码是一个糟糕的解决方案。我需要能够让我的webservice读取密码,并将其与每个请求一起传输。我还需要能够访问所有的历史密码,以确保我的新生成的密码不是重复的。

理想情况下,我希望将每个(加密的)密码存储在我的数据库中,并在需要调用webservice时对其进行解密。有什么我应该遵循的最佳做法吗?我应该使用Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric(..)?加密每个密码吗?

注意:不幸的是,我无法更改外部API功能的方式。我必须遵守规定的规则。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-28 22:34:09

关于密码历史,我将从两条路线中走一条:

  1. 按照您当前的计划,将密码存储在文件/db/config中--建议您使用哈希算法(而不是加密)来比较新密码和存储的密码散列以实现“相等”。
  2. 不要费心地存储密码历史记录--让第一次尝试更改密码的web服务也失败了,如果它也愿意的话,然后用另一个密码重新发送。这样,您就不会重复密码更改web服务的业务规则(例如,假设他们更改它以允许您在6个月后重新使用密码)。

关于存储当前密码:假设您必须以明文形式发送密码,那么是的,您应该以加密的形式存储它。关于如何做到这一点,有许多关于在外面的文章。或者,您甚至可以加密配置文件的特定部分,如在这里看到的。

票数 6
EN

Stack Overflow用户

发布于 2011-06-28 22:44:59

最简单的方法..。使用ProtectedData类:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx

代码语言:javascript
复制
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(password);
byte[] cypher = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
//... reverse
byte[] bytes = ProtectedData.Unprotect(cypher, null, DataProtectionScope.CurrentUser);
string password = System.Text.Encoding.UTF8.GetString(bytes);
票数 1
EN

Stack Overflow用户

发布于 2011-06-28 22:29:16

ASP.NET IIS注册工具(Aspnet_regiis.exe)可以加密和解密web.config的部分。应用程序中不需要特殊的代码,因为ASP.NET 2.0将在运行时神奇地解密部分。

http://msdn2.microsoft.com/en-us/library/zhhddkxy.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6513780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档