现在的位置: 首页 > 综合 > 正文

WCF一步一步往前爬(四)

2013年09月01日 ⁄ 综合 ⁄ 共 1784字 ⁄ 字号 评论关闭

第四步:

WCF安全问题探讨。以及如何使用“服务跟踪查询器”工具。

WCF程序有更多的安全问题,因为消息需要跨越机器边界传递,对消息进行加密是一方面,带签名是另一种方式。通常WCF包括传输通道和消息级别的安全性。如https就是具有更高安全性的传输专用通道,消息级别包括加密和解密等。

一、消息级别的TCP服务保护

示例:NetTcpBinding绑定的消息加密。宿主程序和客户端的配置文件中分别增加

       <netTcpBinding>
                <binding name="ProductsClientTcpBindingConfig">
                    <security mode="Message">
                        <message algorithmSuite="Basic128" />
                    </security>
                </binding>
        </netTcpBinding>

然后修改binding=netTcpBinding的endpoint指定bindingConfiguration属性=tcpBindingConfig,这样这种绑定的消息会自动进行加密和解密。这样可以通过service trace viewer工具查看D:\project\LS.PRJ2011\ProductsServiceHost\ProductsService.svclog(这个地址在你本机可能需要修改)这个文件来观察消息是否真正的被加密了。

基本BasicHttpBinding绑定的消息加密需要证书,比较麻烦,但WSHttpBinding绑定的消息加密默认就会有消息加密功能,所以只要提供一个WSHttpBinding的endpoint就OK。

二、在传输通道级别保护一个HTTP服务

我提到过,传输通道的保护可以配置为https来增强保护,由于启用https需要证书文件,比较麻烦。暂时不演示了,后面有时间再补充吧。

三、认证与授权

认证和授权是基本form验证的一种有效方式,也是在web程序中用的最多的一种验证方式。WCF对认证和授权有了很好的支持,这个主题也很广泛,这里只是简单演示服务器端怎么样拿到客户端的windows用户名。

面来实践一下Microsoft Service Trace Viewer这个WCF工具是如何耍的(下面的项目都是基于在前面的实例)

打开ProductsServiceHost项目,右键app.config->编辑WCF配置->诊断->消息日志记录。把LogEntireMessage,LogMessagesAtServiceLevel,LogMessagesAtTransportLevel属性设为True。

诊断->源->新建源。名称:System.ServiceModel.MessageLogging;级别:Verbose。

诊断->侦听器->新建侦听器。InitData:D:\project\LS.PRJ2011\ProductsServiceHost\ProductsService.svclog;Name:MessageLog;源:(添加)System.ServiceModel.MessageLogging。

ok,使用Microsoft Service Trace Viewer的前提配置就搞定。把文件D:\project\LS.PRJ2011\ProductsServiceHost\ProductsService.svclog打开就可以跟踪消息。

在这里,我是想一探消息级别的加密机制是怎么个回事。那么还得做些设置。

绑定->新建绑定配置。Name:ProductsServiceTcpBindingConfig;->安全性。Mode:Message;AlgorithmSuite:Basic128;MessageClientCredentialType:Windows并且将bindingConfiguration="ProductsServiceTcpBindingConfig"

对于客户端项目ProductsClient,新建绑定ProductsClientTcpBindingConfig,其他配置与服务端一样。

抱歉!评论已关闭.