系统规格: 使用.NET 3.0的C#客户端。作为App Server上的Windows服务托管的WCF服务。用于数据存储的MSSql Server 2008R2 DB。
用户密码的哈希值存储在数据库中,用于验证用户身份。我的问题是,我不知道如何使用客户端密码的哈希来安全地验证客户端到服务器。
在阅读了有关SO的类似问题后,我看到建议采用挑战 - 响应机制。有人可以给出如何做到这一点的良好编码示例吗?
此外,如果我们可以在服务器上安全地生成私钥 - 公钥对并将公钥分发给所有客户端,那么使用公钥加密来传递来自客户端和服务器的信息就足够了,而不是使用质询 - 响应。
编辑:客户端我指的是实际使用客户端计算机登录的用户。
答案 0 :(得分:2)
使用SSL进行客户端 - 服务器通信,并处理您的公钥(AKA非对称)加密。您无需自己编写代码just configure it to use SSL。
答案 1 :(得分:0)
如果客户端和服务器位于同一个AD域,最简单的选择是使用带有AD身份验证的net.tcp传输。用户kerberos令牌将呈现给服务,并可使用AD角色进行身份验证 如果您无法使用集成的AD身份验证并且必须使用该方案,则可以使用自定义用户名validator
答案 2 :(得分:0)
这个过程如下: -
服务器生成质询并发送给客户。例如X
在客户
passwordHashed =哈希(密码) challengeHashClient = Encrypt(X,passwordHashed)// passwordHashed是键
将challengeHashClient发送到服务器。
在服务器上
从数据库获取密码 challengeHashServer =加密(X,passwordhashed)
将challengeHashServer与challengeHashClient匹配
此操作也必须有超时以防止重放攻击。
但是,如果您使用的是Windows环境,为何不考虑使用Windows Kerberos身份验证?