WCF安全系列(一) - basicHttpBinding

一、         basicHttpBinding.

2

1           安全模式None. 3

2           安全模式Message - 客户端验证:Certificate. 5

2.1.         获得和安装证书... 5

2.2.         服务端代码:... 5

2.3.         客户端代码:... 6

2.4.         测试... 7

3           Transport – 客户端验证:None. 7

3.1.         新建WCF服务应用程序... 7

3.2.         配置服务端web.config. 8

3.3.         设置服务端IIS设置( SSL服务端证书)... 9

3.3.1.              设置IIS允许匿名访问... 9

3.3.2.              获得证书... 9

3.3.3.              IIS7.0中配置SSL. 10

3.3.4.              SSL服务端证书需要特别注意之处... 13

3.4.         建立客户端... 14

3.5.         测试... 15

4           Transport – 客户端验证:Basic. 16

4.1.         服务端修改... 17

4.2.         客户端修改... 17

4.3.         测试... 17

5           Transport – 客户端验证:Ntlm... 18

5.1.         服务端修改... 19

5.2.         客户端修改... 19

5.3.         测试... 19

5.4.         访问权限控制... 20

6           Transport – 客户端验证:Windows. 21

7           Transport – 客户端验证:Certificate. 21

 

 

绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点。绑定由一些元素组成,这些元素指定如何对 Windows Communication Foundation (WCF) 通道进行分层以提供所需的通信功能,包括采用什么基础传输协议,TCPHttp等,使用什么协议保证消息的安全性,比如HTTPS或者WS-security,传输的消息的编码方式,比如TEXT还是MTOM

WCF中有多种binding形式,多种安全模式,多种身份验证方式,这些组合在一起可以形成太多的组合。

本文将把各种典型的安全模式、各种绑定和客户端验证方式组合分别用实例进行配置并测试验证。这一篇是专门讨论BasicHttpBinding绑定的。

 

测试环境

l  服务端:

服务器名:win2008

操作系统:Windows server 2008

开发环境:visual studio 2008

运行环境:.net framework 3.5

Web服务器: IIS 7.0

浏览器:IE 7.0

l  客户端:

服务端机器同时充当测试客户端机器,同时准备了一台win2003的机器做测试客户端:

计算机名:win2003base2

操作系统:Windows server 2003

运行环境:.net framework 3.5

浏览器:IE 7.0

 

共用测试WCF服务类

所有测试都是用同样的服务端contract和实现这个contractservice

[ServiceContract(Namespace = "http://chnking.com")]

public interface IGetIdentity

{

    [OperationContract]

    string Get(string ClientIdentity);

}

public class GetIdentity : IGetIdentity

{

    public string Get(string ClientIdentity)

    {

        return ("服务端Identity '" + ServiceSecurityContext.Current. PrimaryIdentity.Name +

            "'/n/r客户端Identity '" + ClientIdentity + "'");

    }

}

代码很简单,一个contract提供了一个Get方法,接收一个string参数,返回一个string参数。在后面的测试中,客户端把客户端安全上下文的Identity发送到服务端,服务端返回服务端安全上下文的Identity给客户端。

 

一、  basicHttpBinding

这种绑定适用于与符合 WS-Basic Profile Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。

basicHttpBinding的默认安全模式是None,即没有任何安全设置,消息都以明文传送,对客户端也不进行验证。

但是basicHttpBinding绑定可以实现安全传输,也可以通过传输层和消息层来保证消息的安全性。

basicHttpBinding设置为Transport安全模式,传输层的安全是使用IIS的安全机制,比如基本身份验证、集成windows验证、SSL安全通道等等。

basicHttpBinding设置为Message安全模式,消息层使用WS-Security保证消息的安全性,Message模式只支持客户端Certificate验证。

 

1、 安全模式None

这部分的测试代码:basicHttpBinding_None.rar

basicHttpBinding绑定默认不提供安全性,默认的安全模式是None,不提供任何安全性,WCF提供这种方式只是为了跟WS-Basic Profile Web 服务兼容。WCF的其它绑定默认都是提供安全性的。

这种方式的安全性:

完整性

不提供

保密性

不提供

服务端身份身份验证

不提供

客户端身份验证

无,并忽略客户端验证的其他方式设置,固定为None

本例采用全代码方式,不使用配置文件。

服务端代码:

internal class MyServiceHost

{

    internal static ServiceHost myServiceHost = null;

    internal static void Main()

    {

        //设置BasicHttpBinding绑定

        BasicHttpBinding myBinding = new BasicHttpBinding();

        //安全模式None

        myBinding.Security.Mode = BasicHttpSecurityMode.None;

        Uri baseAddress = new Uri("http://localhost:8056/WCFService/");

        myServiceHost = new ServiceHost(typeof(GetIdentity), baseAddress);

        ServiceEndpoint myServiceEndpoint = myServiceHost.AddServiceEndpoint(typeof(IGetIdentity), myBinding, "GetIdentity");

        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();

        behavior.HttpGetEnabled = true;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 C# WCF 服务的例子: 首先,在 Visual Studio 中创建一个新的 WCF 服务应用程序项目。然后,在服务契约中定义一个简单的操作: ```C# [ServiceContract] public interface IMyService { [OperationContract] string GetMessage(string name); } ``` 这个操作接受一个字符串类型的参数,返回一个字符串类型的消息。 接下来,在服务实现中实现这个操作: ```C# public class MyService : IMyService { public string GetMessage(string name) { return "Hello, " + name + "!"; } } ``` 这个实现接受一个字符串类型的参数,返回一个拼接了该参数的消息。 然后,在配置文件中定义一个终结点: ```XML <system.serviceModel> <services> <service name="MyService"> <endpoint address="http://localhost:8080/MyService" binding="basicHttpBinding" contract="IMyService"/> </service> </services> </system.serviceModel> ``` 这个终结点定义了服务的地址、绑定和契约等信息。 最后,在 host 中启动服务: ```C# ServiceHost host = new ServiceHost(typeof(MyService)); host.Open(); ``` 这个 host 启动了 MyService 类型的服务。 现在,WCF 服务已经启动并且可以接收客户端的请求。在客户端中,你可以使用类似下面的代码来调用服务: ```C# ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>( new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/MyService")); IMyService proxy = factory.CreateChannel(); string message = proxy.GetMessage("World"); Console.WriteLine(message); ``` 这个客户端创建了一个 IMyService 类型的代理对象,并调用了它的 GetMessage 方法,将 "World" 作为参数传递,并将返回的消息打印到控制台上。 这就是一个简单的 C# WCF 服务的例子,它展示了如何定义服务契约、实现服务操作、配置服务终结点和启动服务 host。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值