WCF和wsHttpBinding - 消息加密

时间:2013-07-14 20:07:44

标签: c# wcf iis-7 wshttpbinding

我正在使用WCF实现的客户端 - 服务器项目。客户端部署在不同的计算机上,并通过Internet与服务进行通信。我对WCF比较新,对于为我的Web服务选择合适的绑定有点困惑。客户端需要被授权执行操作,但是,我正在实现自己的身份验证算法并尝试避免Windows身份验证,原因有多种,但我仍然需要确保在通道中传输的邮件是加密的。

现在我正在使用安全模式设置为wsHttpBinding的{​​{1}}。完整配置如下所示:

enter image description here

我已将Message中的身份验证类型设置为IIS以确保请求通过,并且由于我的绑定中的Anonymous Authentication已明确指出,因此期望服务调用失败设为MessageClientCredentialType。但是,当我运行代码时,服务成功调用并返回预期值。我有一种感觉,我错过了一些东西 - 为什么电话会被授权?即使身份验证类型设置为Windows,我还能确保邮件仍然是加密的吗?任何帮助表示赞赏。

修改

为了澄清这一点,我使用部署到不同域的网络外部机器的客户端测试了该服务。

2 个答案:

答案 0 :(得分:0)

这篇MSDN文章总结了许多与WCF相关的安全问题

http://msdn.microsoft.com/en-us/library/ms733836.aspx

关于你的具体情况, negotiateServiceCredential="true"表示您将证书分发简化到客户端以进行邮件加密。

此选项仅适用于Windows客户端,并且存在一些性能问题。 在此处阅读更多内容http://msdn.microsoft.com/en-us/library/ff647344.aspx 在此页面中搜索“简化证书分发”主题。

答案 1 :(得分:0)

您使用哪个帐户拨打服务电话?在IIS中允许匿名允许您的请求传递给服务,如果您的调用者具有Windows可识别的凭据(Active Directory / NTLM),则服务应进行身份验证。 在您的情况下,我认为您在自己的环境中测试它,以便服务响应。一旦你通过互联网部署它,我怀疑如果你将clientcredentialtype保存到windows,你的服务将允许域外的任何人。 检查这些链接以确保Internet上的服务 - http://msdn.microsoft.com/en-us/library/ms734769.aspx http://msdn.microsoft.com/en-us/library/ms732391.aspx