2

我知道在技术文档中到处都定义了一堆 WCF 配置选项,例如传输、消息模式、加密消息、ssl、https、证书、可靠传输...... bla bla bla

但是,对我来说,这些只是没有任何证据的话语。他们说,如果您不实施这些安全功能,黑客或任何人都可以拦截 WCF 调用并获取数据。

我的问题是 - 作为开发人员,我如何才能用我的眼睛看到(而不是盲目地相信他们所说的而不理解他们在说什么)如果我应用一些配置参数,客户端和 WCF 服务之间传递的任何东西确实是安全的如果我不应用它们会不安全吗?

甚至可能吗?我无法在互联网上找到与此相关的任何信息。没有任何。

例如,为什么我应该使用 https 而不是 http,为什么我应该为 endoint config 定义 Transport,它本身有各种奇怪的设置,对我来说毫无意义,我不能用我的眼睛看到这些设置有什么影响。

我需要看证据。在使用 Firebug 的 Firefox 中,我有一个调用 wcf 服务的 webclient default.aspx 页面,传递一个字符串,wcf 返回“Hello”+ 字符串,无论我指定什么,我都会看到以明文形式传递的值,尽管 wcf 使用的是 https .

谢谢。

4

1 回答 1

2

好吧,当我想查看与 WCF 交换的所有消息时,我通常使用这种技术。

示例:以下示例是 WCF 中的 RESTFull 调用,但该技术适用于使用 WCF 完成的所有类型的通信。

 using (WebChannelFactory<ITestService> cf = new WebChannelFactory<ITestService>(new Uri("http://172.80.1.235/")))
                {
                    ((WebHttpBinding)cf.Endpoint.Binding).MaxReceivedMessageSize = 2147483647;
                    cf.Endpoint.Behaviors.Add(new RestMessageInspector());
                    ITestService channel = cf.CreateChannel();
                    TestJob job = channel.CancelJob(id, new MemoryStream(Encoding.UTF8.GetBytes("<cancel></cancel>")));
                }

在这个例子中我们可以看到cf.Endpoint.Behaviors.Add(new RestMessageInspector()); 这将使您能够跟踪所有通信。

类 RestMessageInspector 需要创建如下:(需要实现两个接口 IClientMessageInspector 和 IEndpointBehavior)

public class RestMessageInspector : IClientMessageInspector, IEndpointBehavior
    {
        public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {
        }

        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
        {
            return null;
        }

        public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {

        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            clientRuntime.MessageInspectors.Add(this);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {

        }

        public void Validate(ServiceEndpoint endpoint)
        {

        }
    }

然后使用断点,您将能够跟踪整个过程;)并查看所有消息!

总之,要点是包括实现这些接口的额外行为。

我希望它会帮助你!

于 2013-07-04T15:23:26.977 回答