【问题标题】:front-line authentication with Web Services使用 Web 服务进行前线身份验证
【发布时间】:2012-02-14 04:34:45
【问题描述】:
我似乎对我需要做什么感到困惑。这是一个正常的登录场景。我在数据库中存储密码的哈希值。[请不要考虑我使用什么哈希函数]。在登录时
用户输入他的纯文本密码。现在我需要做的是散列这个密码,将它传递给网络服务然后我的数据库需要比较两个散列值。现在我不知道的是。
当我在登录时使用盐对密码进行哈希处理时。它仍然是我得到的相同值还是其他东西
我的数据库(Sql server 2008)能否比较两个散列值,如果不是,那么我需要做什么。不需要从数据库中获取密码。
通过 Web 服务传递散列密码需要额外考虑安全性吗?
我还需要处理密码恢复。我可以在这里使用加密/解密算法。
请建议我需要做什么。
【问题讨论】:
标签:
c#
asp.net
web-services
enterprise-library
【解决方案1】:
为了提高安全性,最好使用随机盐。
我在存储在 SQL 服务器中时用来保护密码的方式是:
从密码创建盐,然后通过连接生成哈希
用户名和密码..
它将使盐依赖于密码和用户名。如果您正在恢复密码,那么如果凭据正确,那么您可以重置密码。
我可以使用加密/解密算法吗
??
根据您的加密方法,创建您自己的算法,使用 .net 加密库使用盐加密和解密密码。
【解决方案2】:
您也必须将盐保存到数据库中。
在身份验证中,获取盐,用盐对输入的密码进行哈希处理,与数据库中的哈希值进行比较。所有这些都可以驻留在 C# 代码中。
您无法从哈希值中获取原始密码。您可以生成一个随机密码并强制客户在下次登录时更改密码。
所以我认为散列值可以安全地在线传输。对于站点管理员,即使他可以访问数据库,他仍然不知道客户的密码。