如何保护从Windows服务托管的WCF Web服务?

问题描述:

我有一个关于WCF web服务安全性的问题。目前,我们正在开发一个android移动项目,并使用wcf web服务进行数据传输和操作。 我们使用basicHttpBinding作为Window服务承载Web服务。如何保护从Windows服务托管的WCF Web服务?

目前我们没有任何安全模式,如果知道服务地址,我恐怕每个人都可以使用我们的Web服务。 例如,我们有一个服务方法,它将返回字符串值。目前,我可以将该服务添加到其他Visual Studio项目和移动项目中,我们可以随时使用。

//WCF Service Method 
public string DoWork() 
{ 
     return "This is return string!"; 
} 

    //We can consume it like below from other dot net project by adding service reference. 
    //Actually, those are not real client. 
    ServiceReference1.WebServiceClient serv = new TestingPrj.ServiceReference1.WebServiceClient(); 
    string result = serv.DoWork(); 

我的问题是我如何确保我的网络服务真正的客户?我不希望其他项目和人员使用我们的Web服务。

+0

这里有很多帮助:https://www.google.com/#q=securing+wcf+web+services – 2012-03-27 17:34:34

+0

我已经尝试过,但大部分答案都是针对IIS中托管的web服务的。这就是为什么我在这里提出问题。无论如何,感谢您的帮助。 – Chong 2012-03-27 17:51:36

使用SSL证书是最安全的方法。

+0

ssl证书如何防止错误的用户访问服务? – mellamokb 2012-03-27 17:33:06

+0

我们将服务作为窗口服务托管,我们不使用IIS服务器。 是否有可能以这种方式使用SSL cerficicates? – Chong 2012-03-27 17:33:48

+0

是的,您可以通过配置文件或将服务编码为HTTPS来完成。如果您在运行Windows服务的服务器上安装了证书,则它应绑定到证书。 – mellamokb 2012-03-27 17:39:24

最简单的方法是使用基于SSL的基本身份验证。基本身份验证要求客户端有一个用户名/密码对,只有您的应用程序才会知道。如果验证纯粹是为了知道您的客户端是否正确(而不是知道哪个用户正在连接),那么您可以使用一个硬编码的用户名/密码。

也应该使用SSL,因此凭据不会以纯文本形式传输线路,并且可能会被嗅探。