我有一个WCF网络服务。此Web服务应仅允许某些客户端应用程序(使用Silverlight,Flex,ClickOnce等技术构建)来执行其功能。为了实现这一目标,我使用以下代码启动了每个公开可见的方法:
if(IsClientValid(...)== false) 返回;
我的问题是,我应该检查什么?我已经考虑将唯一标识符作为字符串参数传递,然后将该参数传递给IsClientValid方法。但是,我知道有人可以使用像Fiddler这样的工具来嗅出该参数值并在自己的应用程序中使用它。如何唯一标识我的客户端应用程序,以便只有他们可以使用我的WCF Web服务?
谢谢
答案 0 :(得分:1)
根据您想要走多远,您可以做任何事情。在我工作的应用程序中,我们执行了以下操作:
邮件安全 - 要加密邮件,客户端必须提供凭据(userNameAuthentication)和服务器提供serviceCertificate以进行邮件加密。
自定义加密的Soap Headers用于在初次登录后为每条消息提供客户端详细信息。此标头使用从客户端应用程序获取的值和从初始调用中的服务器检索的值的组合进行加密。
所有客户端外发邮件都附加加密邮件头,服务器在收到邮件时提取/解密,并且基本服务验证所需的值是否存在。
除此之外,服务器端还存储了一组加密标头,以防止使用嗅探头进行重播攻击。
如果您认为可以使用其中的一部分,我可以提供其他资源/链接以了解如何实现其中一些。
编辑: 假设客户端应用程序在您的控制之下。
答案 1 :(得分:0)
签出客户端证书身份验证。基本思想是https连接将失败,除非客户端发送有效证书,您可以在其中确定有效证书。