安全地验证客户端到服务器

时间:2010-11-17 21:20:41

标签: c# .net wcf security authentication

系统规格: 使用.NET 3.0的C#客户端。作为App Server上的Windows服务托管的WCF服务。用于数据存储的MSSql Server 2008R2 DB。

用户密码的哈希值存储在数据库中,用于验证用户身份。我的问题是,我不知道如何使用客户端密码的哈希来安全地验证客户端到服务器。

在阅读了有关SO的类似问题后,我看到建议采用挑战 - 响应机制。有人可以给出如何做到这一点的良好编码示例吗?

此外,如果我们可以在服务器上安全地生成私钥 - 公钥对并将公钥分发给所有客户端,那么使用公钥加密来传递来自客户端和服务器的信息就足够了,而不是使用质询 - 响应。

编辑:客户端我指的是实际使用客户端计算机登录的用户。

3 个答案:

答案 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身份验证?