我正在使用servicestack.net库开发Web服务。
在我的场景中,将从WPF应用程序调用Web服务。我需要能够验证只有经过批准的客户端应用程序才能调用我的服务。
这是否像在客户端应用程序中硬编码“用户名”和“密码”一样简单?这当然不是正确的方法。还有更好的方法吗?
修改 此外,在客户端,用户自己将能够使用用户名/密码登录并向服务发起请求(不确定这是否会影响任何内容,所以我想我会提到它),
答案 0 :(得分:5)
有关ServiceStack see this question中的身份验证的更多背景信息。
通常,您会对用户进行身份验证,而不是您似乎正在执行的客户端。但是,如果您试图锁定服务,以便只能通过一组特定的客户端访问它们,那么您应该考虑将一些PKI用于您的客户端和服务器。
基本上是这样的:客户端在登录时使用加密版本的用户密码以及应用程序中嵌入的私钥发送额外的令牌。服务器具有客户端公钥,因此在登录时将执行未额外验证步骤以解密用户:传递令牌并将其与经过验证的用户凭据进行比较。
如果PKI解决方案太重,那么不使用加密的替代策略可能是客户端使用秘密Guid,当他们登录时将发送Guid的MD5哈希版本和当前时间,以及没用的版本的时间。如果时间在指定的阈值内且MD5哈希值有效,那么他们使用经过身份验证的客户端。