我启动并运行了WCF服务,并且能够使用basicHttpBinding在服务和.Net 2.0客户端之间进行通信。
我现在需要锁定WCF服务,以便只能由经过身份验证的客户端调用。
我可以控制将要调用我的服务的客户端。客户端是一个产品的一部分,将安装在野外和“打电话回家”推送和拉取数据。客户端应用程序是为.Net 2.0框架编写的,目前无法升级到3.0或3.5。我无法将Windows用户帐户添加到客户端计算机。
我有什么选择来保护WCF服务并能够从我的.Net 2.0客户端进行身份验证?此外,数据需要通过https传递。
我一直在网上搜索,感觉我正在疯狂追逐。
答案 0 :(得分:10)
您可以将WCF端点配置为使用双向SSL身份验证。这意味着您可以要求客户出示X.509证书,以便在向服务提出请求时确认其身份。
在服务器端,您可以使用WCF中的一个内置验证方案,或者提供您自己的验证逻辑来检查X.509证书。
如果您在IIS中托管服务,则将SSL配置为需要传输级别的客户端证书将是微不足道的。但是,您可以在此处找到有关如何在自托管WCF服务中实现此行为的良好指南:
http://leastprivilege.com/2007/08/25/certificate-based-authentication-and-wcf-message-security/
我自己没有尝试过,但由于这会在消息级中创建安全性要求,我认为您必须使用 wsHttpBinding 来强制执行此操作您的WSDL合同,因为强制要求访问Web服务是WS- *标准的一部分。
如果您必须使用 basicHttpBinding ,您可以尝试使用此解决方案,以便在传输级别上移动:
http://leastprivilege.com/2007/08/26/certificate-based-authentication-and-wcf-mode-independent/
希望这有帮助
答案 1 :(得分:4)
好的,使用SSL,您可以获得传输级安全性;这很好,可以保护信息免受嗅探和改变。
所以现在你有选择;你需要验证是否保持沉默,或者你可以在程序启动时提示用户输入用户名/密码?如果它必须是静默的,那么你可以按照提到的那样获得客户端证书(尽管这很痛苦,你需要自己生成证书并验证它们,因此你需要看看运行自己的证书颁发机构)。或者,您可以在包含客户端ID的邮件中嵌入自定义标头,并以kludgey方式执行此操作。
但是,如果您可以提示输入用户名和密码,那么您可以使用custom authenticator或甚至使用ASP.NET membership database轻松地对该方式进行身份验证并将其插入数据库查找。
答案 2 :(得分:1)
以下是我最终做的事情,这似乎是我们情况下最简单的解决方案,这个规模非常小,只有少数几个Web服务暴露出来:
希望有人帮助......
答案 3 :(得分:0)
使用SSL证书是.NET 2.0客户端访问WCF服务的唯一选项,因为basicHttpBinding不提供安全性。通过使用SSL,您可以保护整个传输渠道。
检查链接http://www.codeplex.com/WCFSecurityGuide/Release/ProjectReleases.aspx?ReleaseId=15892。它涵盖了涵盖所有场景的WCF安全性。
要获得免费的SSL证书,请访问http://www.comodo.com/或http://www.instantssl.com/并在您的申请中试用。
答案 4 :(得分:0)
您的安全性将由ssl覆盖。
对于身份验证,您有两个选项 - 基本(用户名和密码)或证书。
Here是一个演示配置证书身份验证的视频。
您正在配置basicHttpBinding的安全元素,如下所示:
< basicHttpBinding的>
< binding name =“basicHttp”>
< security mode =“TransportWithMessageCredential”>
< message clientCredentialType =“Certificate”/>
< /安全>
< /结合>
< / basicHttpBinding的>
此here上还有一个很好的页面。谷歌在clientCredentialType上你很快就会发现自己走在正确的轨道上。
要设置客户端证书,请使用wse * policy文件。
您需要弄清楚如何向各个站点提供客户端证书.-这取决于项目的安全性问题。有各种各样的方式(我没有记住对不起,我最后做了这个,因为wse *大约两年前因为细节被遗忘了,但这肯定是可能的,花了几天时间进行了扎实的研究才找到一个好的方法)。