WCF一些安全文章


WCF异步: 在“配置服务”选项中, 选择生成异步操作,这里全部的方法都会生成异步,当然也有不是异步的,
异步时,前台调用的也是异步的,就是说前台不需要任何的异步方法
对于PerCall模式,一定要记住,如果服务对象中的数据没有固化,并且不是静态变量,那它每次操作都会被重新初始化。
对于PerSession模式,第一要清楚有些Binding是不能用于此种模式的,具体什么可用,什么不能用,可以查阅http://www.cnblogs.com/jillzhang/archive/2008/02/03/1063406.html 。另外,PerSession模式并不是代表状态会自动维护,那些被设置了IsTerminating=True的操作完成的时候,也会释放资源和销毁对象。即使不是Ture,那如果客户端长时间不与服务端联系,达到服务端最大忍耐限度,服务端也会变心。
对于Single模式,既然例外就它老哥一个,就简单得多了,它能保持服务对象中的非静态全局变量。但是特别要注意的是,如果在这种模式下的话,要特别注意线程安全的问题,让10个人同时让一个理发师傅来服务。
IsTerminating的作用是在Session中, 它可以立即销毁实例,实例将不能再调用,往往可以把它放在最候。
SessionMode是放在接口那里的, [OperationContract(IsTerminating = false)] 放在OperationContract这个选项中,如要用IsTerminating则必须增加 [ServiceContract(SessionMode=SessionMode.Required)]
在弄WCF服务投票事务时,必须采用SESSION的方式来做,
如果你不使用安全会话模式,那么每次调用请求都会引发服务器端的UserNamePasswordValidator;
启用消息安全必须配置证书
http://www.cnblogs.com/MaYong/archive/2009/06/30/1514189.html
1、为每个类(您所提到的)设计一个接口(契约)
2、用一个服务类实现所有的接口
http://msdn.microsoft.com/zh-cn/library/ms733775.aspx
你的问题涉及到安全几乎所有的概念。为了能回答你的问题,我查阅了很多资料。包括WCF绑定的、安全相关、证书、非对称加密算法等概念。
现在我来回答你的问题:
1.wsHttpBinding:默认采用https传输协议。https支持安全套接字层 (SSL)加密。而这里https要求证书支持,证书使用的是非对称加密,也就是公钥和密钥对。这个可以实现传输安全。防止被破译。这个是默认的传输协议方式。
2.关于破译:理论上时可以破译,但是以RSA非对称加密算法为例,要破译出密钥,需要1000亿年时间。或许目前计算机速度提升很快的话,破译时间可以缩短。
3.关于消息篡改:为了防止篡改,这里要求使用证书签名。过程是,双方约定一个hash算法,对消息进行hash,然后使用证书对消息的哈希值进行加密。加密后的hash值和加密的消息一起发送到服务器。服务器获得消息以后使用公钥解密,然后使用同一个hash算法对接收的消息进行hash运算,比较两次的值,如果匹配的话,就不会被篡改。这个也是签名放篡改的一般过程。
4.WSHTTP方式或TCP方式发布:用户名和密码。需要重写Validate方法,实现用户名和密码的验证,WCF框架会自动调用Validate,这里和WSE相似。Soap Header方式其实比较简单的方式,之间从soap 消息头里取得客户端设置的用户名和密码。WSE3.0和WCF提供的方案更加安全。你可以参考一下这个http://msdn.microsoft.com/zh-cn/library/ms733775.aspx。或者搜索很多WCF用户名和密码的文章。可能要使用到证书,以前WSE我试验的不需要。WCF我查询的很多人写的文章都说要使用证书。安全的文章我一直想验证一下。
一下是对你的问题会有帮助的资料:
1.http://msdn.microsoft.com/zh-cn/library/ms731362.aspx
2.http://msdn.microsoft.com/zh-cn/library/ms733768.aspx
3.http://msdn.microsoft.com/zh-cn/library/ms731346.aspx
4.http://msdn.microsoft.com/zh-cn/library/system.servicemodel.httpclientcredentialtype.aspx
5.http://www.stahosting.com/archiver/tid-1843.html