日期:2014-05-18  浏览次数:20781 次

Wcf服务的安全性
实现网络通信时可以使用“WCF”。

实现过程:
  通过“asp.net站点”将“WCF”服务发布出去,然后被“客户端”调用,就可以实现网络通信

那岂不是,如果别人知道“WCF”服务的地址,也可以使用了???调用其中的方法,然后就可以修改服务器上的数据了。

这样“WCF”岂不是存在安全隐患?

比如,使用WCF向“Silverlight”客户端公布数据。

------解决方案--------------------
等你们回答我来看结果
------解决方案--------------------
可以在数据库加一个字段存放分配给客户的密钥,每次调用WCF方法必须提交一个密钥,合法即可访问,不合法即拒绝返回数据。
------解决方案--------------------
WCF 安全模型十分强大。。。Windows认证,用户/密码, X509证书... 建议看看msdn。

http://msdn.microsoft.com/zh-cn/library/ms731925.aspx
------解决方案--------------------
一般使用用户名+密码的方式验证,你开发的方法增加2个参数,让调用方传递用户名和密码进去,每次调用都验证。
------解决方案--------------------
其它方法也有,有个特殊点的,通过SOAP头来传递验证信息,先通过登录方法,验证身份通过后,传递给用户一个当前有效的会话ID,然后用户本地缓存,添加到SOAP头,每次发送任何请求都附带这个SOAP头的信息,这样服务端检验SOAP头部是否是有效的会话ID就可以验证身份了。
------解决方案--------------------
可以,这个SOAP头信息是在客户端添加的,当然,如果客户端直接用IE访问,肯定是没法添加了,必须用.NET程序来添加(其它语言的程序是否可以不知道,反正符合SOAP规范定义的)。
下面提供一种实现方式:
C# code
    public class ContextHeader : IClientMessageInspector
    {
        public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {

        }

        public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
        {
            MessageHeader clientHeader = MessageHeader.CreateHeader("LoginID", string.Empty, DataManager.loginid);           
            request.Headers.Add(clientHeader);

            return null;
        }
    }

------解决方案--------------------
http://blog.csdn.net/fangxinggood/article/details/6144893
------解决方案--------------------
探讨

http://blog.csdn.net/fangxinggood/article/details/6144893