从.Net 2.0客户端调用WCF服务时如何配置安全性

从.Net 2.0客户端调用WCF服务时如何配置安全性,wcf,security,.net-2.0,Wcf,Security,.net 2.0,我已经启动并运行了一个WCF服务,并且能够使用basicHttpBinding在该服务和.NET2.0客户端之间进行通信 我现在需要锁定WCF服务,以便它只能由经过身份验证的客户端调用 我可以控制呼叫我服务的客户。客户端是产品的一部分,该产品将安装在野外并“打电话回家”推拉数据。客户端应用程序是为.Net 2.0 framework编写的,目前无法升级到3.0或3.5。我无法将windows用户帐户添加到客户端计算机 对于保护WCF服务并能够从.Net 2.0客户端进行身份验证,我有哪些选项?此

我已经启动并运行了一个WCF服务,并且能够使用basicHttpBinding在该服务和.NET2.0客户端之间进行通信

我现在需要锁定WCF服务,以便它只能由经过身份验证的客户端调用

我可以控制呼叫我服务的客户。客户端是产品的一部分,该产品将安装在野外并“打电话回家”推拉数据。客户端应用程序是为.Net 2.0 framework编写的,目前无法升级到3.0或3.5。我无法将windows用户帐户添加到客户端计算机

对于保护WCF服务并能够从.Net 2.0客户端进行身份验证,我有哪些选项?此外,数据需要通过https进行传递


我一直在网上搜索,感觉就像在白费力气。

使用SSL证书是.NET 2.0客户端访问WCF服务的唯一选项,因为basicHttpBinding不提供安全性。通过使用SSL,您可以保护整个传输通道

检查链接。它涵盖了涵盖所有场景的WCF安全


要获得免费SSL证书,请访问或在您的应用程序中试用。

SSL将涵盖您的安全

对于身份验证,您有两个选项-基本(用户名和密码)或证书

是演示配置证书身份验证的视频

因为您正在配置basicHttpBinding的安全元素,如下所示:







这方面也有很好的一页。在clientCredentialType上谷歌一下,你应该很快就会发现自己走上了正确的道路

要设置客户端证书,请在wse*策略文件之后进行


您需要确定如何向各个站点提供客户证书。-这取决于项目的安全问题。有多种方法(没有一种我记得很抱歉,我上次是在大约两年前为wse*到wse*这样做的,所以细节被忘记了,但确实有可能,花了几天时间进行了深入的研究以找到一种好方法)。

您可以将WCF端点配置为使用双向SSL身份验证。这意味着您可以要求客户端在向服务发出请求时提供一份X.509证书,以确认其身份。

在服务器端,您可以使用WCF中的一个内置验证方案或提供自己的验证逻辑来检查X.509证书。
如果您是在IIS中托管服务,那么将SSL配置为需要传输级别的客户端证书就很简单了。但是,关于如何在自托管WCF服务中实现此行为,您可以在此处找到一个很好的指南:

我自己没有尝试过这一点,但是,由于这在消息级别创建了一个安全需求,我认为您必须在WSDL契约中使用wsHttpBinding来强制执行它,因为强制执行访问web服务的安全需求是WS-*标准的一部分

如果您必须使用basicHttpBinding,您可以尝试此解决方案,而不是在传输级别上进行升级:


希望这有助于

好吧,使用SSL,您可以获得传输级别的安全性;这很好,可以保护消息不被嗅探和更改

所以现在你有了选择;您是否需要验证保持静默,或者在程序启动时提示用户输入用户名/密码?如果它必须是静默的,那么您可以像前面提到的那样使用客户端证书(尽管这很痛苦,但是您需要自己生成证书并验证它们,因此您需要查看运行您自己的证书颁发机构)。或者,您可以在包含客户机ID的消息中嵌入一个自定义头,并以笨拙的方式执行


但是,如果您可以提示输入用户名和密码,那么您就可以通过这种方式进行身份验证,并将其插入到数据库查找中,这非常容易,可以使用,甚至可以使用。

以下是我最后做的事情,这似乎是在我们的情况下最简单的解决方案,它的规模非常小,只公开了少数web服务:

  • 使用SSL保护传输
  • 客户端首先通过调用web服务上的登录方法登录到web服务。如果登录成功,它将向客户端返回加密的FormsAuthenticationTicket
  • 然后,客户端必须在每次web服务调用时提供表单身份验证票证。每个方法都检查票据是否有效,如果有效,则执行其工作。如果票证已过期或无效,客户端必须重新验证

  • 希望这有助于某人…

    因此,SSL将确保传输安全,我明白了。但是,身份验证呢?我不能让任何找到服务的人给我打电话。我可以使用“魔术字符串”方法,但这并不理想。+1指出,在WCF中也可以使用ASP.NET成员资格提供程序模型进行自定义身份验证。对于授权,您还可以使用ASP.NET角色提供程序。第二个链接无效。。。它有一个脚本错误,不允许我查看整篇文章。但是Chrome和IE不允许我。。。我通过主页登录,并刷新。。。不走运。当我在这里搜索介绍性的句子时,它终于起作用了:谢谢我现在正在工作。@makerofthings多奇怪啊——Chrome和IE都在我的机器上工作。你的评论应该会帮助其他遇到同样问题的人。