首页 / 软件开发 / .NET编程技术 / WCF安全之EndPointIdentity
WCF安全之EndPointIdentity2010-12-24 博客园 veter最近在做一个项目,应用了WCF进行分布式开发,中间还涉及到消息路由器等 ,好在有WCF提供了强大的基础支持,当然,本身也作了不少的扩展,实际,我 最关心的是WCF的安全问题,网上不少朋友介绍的WCF的安全也是少得可怜,微软 发布的WCF Security GUID好像讲得也只是入门级别的教程,离真正应用到项目 中还是有很大的距离,这也让我萌发了分享的想法,今天先放出来占个位置吧,有反对的朋友砖头轻 点,呵~,可以告诉你,WCF的安全里,有很多的小秘密,当然还是要告诉你,并且有此小秘密是要自己去体验后才知道,在博客排版方面 ,李会军(军哥)让人 感觉最舒服,在解说方面,军哥也是以简洁著称,我在 这里也学习一下,一起简洁吧,我希望以后的WCF安全探讨里,一次只讲一个小 内容好了~概述Windows Communication Foundation (WCF) 是 Microsoft 为构建面向服务的应用程序而提供的统一编程模型(摘自MSDN),在 分布式环境下的安全问题尤为重要,如果你觉得使用了WCF默认的安全措施可以 让你高枕 无忧,那明天你可就以回家种田了,当然,对于学习来说,足够了~,但我们讲的是真正的项目应用,WCF在各种协议下的安全提供和保证是不尽相同 的。背景故事发生在一个阳光明媚的下午,一名女子为了混入某 小区行窃,将上次偷到的管道维修工作牌别在胸前,当她走近管理员身边时,被 管理员一把抓个正着,原来这小区从上次失窃事件后,已经将维修队解散,现在 维修都是由管理员联系外部人员,自然也不用别什么工作牌了。问题呈 现1、许多朋友对这个EndPointIdentity相当的不屑顾,千万不要小看它 呀,有时候你被wcf弄生弄死的时候还不知道为什么,这次你应该看清楚了。当 你新建一个WCF服务类库时,正确的EndPointIdentity声明如下<endpoint address ="UserData" binding="netTcpBinding" contract="UserService.IUserData" bindingConfiguration="EndpointBinding">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
说实现,EndPointIdentity这东西在革命 初期(wcf初建立时),我觉得它就像是人一盲肠,多了它也没啥用,少了它也不 觉得碍事,你不信?删了试试,你要真删除了其实也没什么。2、客户端 如果引用了服务元数据,生成的EndPointIdentity和服务器端的一模一样,不信 你自己看,实际上,你也可以把它删除了(革命初期),对服务调用没啥影响。3、在你的绑定中,安全选项为None的时候,你想怎么弄它就怎么弄它,不要紧,随便改。如下<binding name="EndpointBinding">
<security mode="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Certificate"/>
</security>
</binding>
4、一旦你将安 全策略调整为:Transport(传输安全)<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Certificate"/>
</security>