WCF常用安全方案(六)

分类:软件开发| 发布:camnprbubuol| 查看: | 发表时间:2011/2/16

匿名客户端的消息安全

下面的方案演示通过 Windows Communication Foundation (WCF) 消息安全进行保护的客户端和服务。其设计目的是使用消息安全而非传输安全,以便将来可支持更加丰富的基于声明的模型。有关 将丰富声明用于授权的更多信息,请参见

 

特征 说明

安全模式

消息

互操作性

仅 WCF

身份验证(服务器)

 

初始协商要求服务器身份验证,而不是客户端身份验证

身份验证(客户端)

完整性

是,使用共享安全上下文

保密性

是,使用共享安全上下文

传输

HTTP

服务

下面的代码和配置应独立运行。执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何创建使用消息安全的服务终结点。

配置

以下配置可代替代码使用。服务行为元素用于指定用来向客户端验证服务身份的证书。服务元素必须使用 behaviorConfiguration 属性指定行为。绑定元素指定客户端凭据类型为 None,这将允许匿名客户端使用该服务。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <behaviors>      <serviceBehaviors>        <behavior name="ServiceCredentialsBehavior">          <serviceCredentials>            <serviceCertificate findValue="contoso.com"                                 storeLocation="LocalMachine"                                storeName="My" />          </serviceCredentials>        </behavior>      </serviceBehaviors>    </behaviors>    <services>      <service behaviorConfiguration="ServiceCredentialsBehavior"                name="ServiceModel.Calculator">        <endpoint address="http://localhost/Calculator"                   binding="wsHttpBinding"                  bindingConfiguration="WSHttpBinding_ICalculator"                   name="CalculatorService"                  contract="ServiceModel.ICalculator" />      </service>    </services>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator" >          <security mode="Message">            <message clientCredentialType="None" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client />  </system.serviceModel></configuration>

客户端

下面的代码和配置应独立运行。请执行下列操作之一:

  • 使用代码(和客户端代码)创建独立客户端。
  • 创建不定义任何终结点地址的客户端。而使用将配置名称作为参数的客户端构造函数。例如:
代码

下面的代码创建客户端的一个实例。绑定使用消息模式安全,客户端凭据类型设置为 None。

配置

下面的代码将配置客户端。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator" >          <security mode="Message">            <message clientCredentialType="None" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client>      <endpoint address="http://machineName/Calculator"        binding="wsHttpBinding"        bindingConfiguration="WSHttpBinding_ICalculator"         contract="ICalculator"        name="WSHttpBinding_ICalculator">        <identity>          <dns value="contoso.com" />        </identity>      </endpoint>    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 13:37 kim zeng 阅读(37) | 评论(0) | 编辑

WCF常用安全方案(五)

利用证书身份验证的传输安全

下面的方案演示由 X.509 证书保护的 Windows Communication Foundation (WCF) 客户端和服务。每个客户端都有一个可用于客户端安全套接字层 (SSL) 身份验证,并受到服务信任的证书。此示例演示一种请求/回复消息模式。

有关 将证书用于服务的更多信息,请参见使用证书如何:使用 SSL 证书配置端口

使用证书的安全传输

 

特征 说明

安全模式

传输

互操作性

与现有 Web 服务客户端和服务。

身份验证(服务器)

身份验证(客户端)

是(使用 HTTPS)

是(使用证书)

完整性

保密性

Transport

HTTPS

绑定

WSHttpBinding

服务

下面的代码和配置应单独运行。请执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何创建使用传输安全和证书的服务终结点。

配置

下面的配置可代替代码用于设置服务:

<bindings>    <wsHttpBinding>        <binding name="CertificateWithTransport">            <security mode="Transport">                <transport clientCredentialType="Certificate"/>            </security>        </binding>    </wsHttpBinding></bindings><services>    <service name="ServiceModel.Calculator"              behaviorConfiguration="credentialConfig" >    <endpoint address=""              binding="wsHttpBinding"              bindingConfiguration="CertificateWithTransport"               contract="ServiceModel.ICalculator" />     </service></services><behaviors>    <serviceBehaviors>        <behavior name="credentialConfig">            <serviceCredentials>                <clientCertificate trustedStoreLocation="LocalMachine"                                    revocationMode="Online"/>            </serviceCredentials>        </behavior>    </serviceBehaviors></behaviors>

客户端

下面的代码和配置应独立运行。请执行下列操作之一:

  • 使用代码(和客户端代码)创建独立客户端。
  • 创建不定义任何终结点地址的客户端。而使用将配置名称作为参数的客户端构造函数。例如:
代码

下面的代码创建客户端。绑定配置为使用传输模式安全(采用 TCP 传输协议),并且客户端凭据类型设置为 Windows。

配置

下面的配置代码是针对该客户端,并且同样指定了证书位置以及用于查找它的值。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <behaviors>      <endpointBehaviors>        <behavior name="credentialConfiguration">          <clientCredentials>            <clientCertificate findValue="Contoso.com"                      storeLocation="CurrentUser"                       x509FindType="FindBySubjectName" />          </clientCredentials>        </behavior>      </endpointBehaviors>    </behaviors>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator">          <security mode="Transport">            <transport clientCredentialType="Certificate" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client>      <endpoint address="https://machineName/Calculator"                behaviorConfiguration="credentialConfiguration"                binding="wsHttpBinding"                bindingConfiguration="WSHttpBinding_ICalculator"                contract="ICalculator"                name="WSHttpBinding_ICalculator" />    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 13:23 kim zeng 阅读(81) | 评论(0) | 编辑

WCF常用安全方案(四)

通过基本身份验证确保的传输安全

下图演示一个 Windows Communication Foundation (WCF) 服务和客户端。服务器需要一个有效的可用于安全套接字层 (SSL) 的 X.509 证书,并且客户端必须信任此服务器证书。此外,Web 服务已经有一个可以使用的 SSL 实现。有关 启用 Internet 信息服务 (IIS) 中的基本身份验证的更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=83822(可能为英文网页)。

使用基本身份验证的传输安全

 

特征 说明

安全模式

传输

互操作性

与现有的 Web 服务客户端和服务进行互操作

身份验证(服务器)

身份验证(客户端)

是(使用 HTTPS)

是(通过用户名/密码)

完整性

保密性

Transport

HTTPS

绑定

WSHttpBinding

服务

下面的代码和配置将独立运行。执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何创建使用 Windows 域用户名和密码确保传输安全的服务终结点。请注意,此服务要求使用 X.509 证书向客户端进行身份验证。有关更多信息,请参见使用证书如何:使用 SSL 证书配置端口

配置

下面将配置一个服务以使用具有传输级安全的基本身份验证:

<?xml version="1.0" encoding="utf-8"?><configuration>    <system.serviceModel>        <bindings>            <wsHttpBinding>                <binding name="UsernameWithTransport">                    <security mode="Transport">                        <transport clientCredentialType="Basic" />                    </security>                </binding>            </wsHttpBinding>        </bindings>        <services>            <service name="BasicAuthentication.Calculator">                <endpoint address="https://localhost/Calculator"                          binding="wsHttpBinding"                           bindingConfiguration="UsernameWithTransport"                          name="BasicEndpoint"                           contract="BasicAuthentication.ICalculator" />            </service>        </services>    </system.serviceModel></configuration>

客户端

代码

下面的代码演示包括用户名和密码在内的客户端代码。请注意,此用户必须提供一个有效的 Windows 用户名和密码。此处不显示用于返回用户名和密码的代码。使用对话框或其他界面来查询用户的相关信息。

注意:

用户名和密码只能使用代码进行设置。

配置

下面的代码演示客户端配置。

注意:

不能使用配置来设置用户名和密码。此处显示的配置必须使用代码进行扩充以设置用户名和密码。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator" >          <security mode="Transport">            <transport clientCredentialType="Basic" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client>      <endpoint address="https://machineName/Calculator"                 binding="wsHttpBinding"                bindingConfiguration="WSHttpBinding_ICalculator"                 contract="ICalculator"                name="WSHttpBinding_ICalculator" />    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 11:57 kim zeng 阅读(45) | 评论(0) | 编辑

匿名客户端的传输安全_WCF常用安全方案(三)

匿名客户端的传输安全

此 Windows Communication Foundation (WCF) 方案使用传输安全 (HTTPS) 确保保密性和完整性。必须使用安全套接字层 (SSL) 证书对服务器进行身份验证,并且客户端必须信任服务器的证书。客户端不通过任何机制进行身份验证,因此是匿名的。

有关示例应用程序,请参见 WS Transport Security。有关 传输安全的更多信息,请参见传输安全概述

有关 将证书用于服务的更多信息,请参见使用证书如何:使用 SSL 证书配置端口

使用匿名客户端的传输安全

 

特征 说明

安全模式

传输

互操作性

与现有 Web 服务和客户端

身份验证(服务器)

身份验证(客户端)

应用程序级(无 WCF 支持)

完整性

保密性

Transport

HTTPS

绑定

WsHttpBinding

服务

下面的代码和配置将独立运行。执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何使用传输安全创建终结点:

配置

下面的代码使用配置设置相同的终结点。客户端不通过任何机制进行身份验证,因此是匿名的。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <services>      <service name="ServiceModel.Calculator">        <endpoint address="http://localhost/Calculator"                   binding="wsHttpBinding"                  bindingConfiguration="WSHttpBinding_ICalculator"                   name="SecuredByTransportEndpoint"                  contract="ServiceModel.ICalculator" />      </service>    </services>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator">          <security mode="Transport">            <transport clientCredentialType="None" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client />  </system.serviceModel></configuration>

客户端

下面的代码和配置将独立运行。请执行下列操作之一:

  • 使用代码(和客户端代码)创建独立客户端。
  • 创建不定义任何终结点地址的客户端。而使用将配置名称作为参数的客户端构造函数。例如:
代码
配置

下面的配置可代替代码用于设置服务。

<configuration>  <system.serviceModel>    <bindings>      <wsHttpBinding>        <binding name="WSHttpBinding_ICalculator" >          <security mode="Transport">            <transport clientCredentialType="None" />          </security>        </binding>      </wsHttpBinding>    </bindings>    <client>      <endpoint address="https://machineName/Calculator"                 binding="wsHttpBinding"                bindingConfiguration="WSHttpBinding_ICalculator"                 contract="ICalculator"                name="WSHttpBinding_ICalculator" />    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 11:55 kim zeng 阅读(39) | 评论(0) | 编辑

WCF常用安全方案(二)

不安全的 Intranet 客户端和服务

下面的插图描述了一种简单的 Windows Communication Foundation (WCF) 服务,开发此服务的目的是为了向 WCF 应用程序提供有关安全专用网络的信息。在以下情况下无需提供安全性:数据重要性较低、网络在本质上是安全的,或者由 WCF 基础结构的下层提供安全性。

不安全的 Intranet 客户端和服务方案

 

特征 说明

安全模式

传输

TCP

绑定

NetTcpBinding

互操作性

仅 WCF

身份验证

None

完整性

None

保密性

None

服务

下面的代码和配置将独立运行。执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何创建不安全的终结点:

配置

下面的代码使用配置设置相同的终结点:

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <behaviors />    <services>      <service behaviorConfiguration=""                name="ServiceModel.Calculator">        <endpoint address="net.tcp://localhost:8008/Calculator"                   binding="netTcpBinding"                  bindingConfiguration="tcp_Unsecured"                   name="netTcp_ICalculator"                  contract="ServiceModel.ICalculator" />      </service>    </services>    <bindings>      <netTcpBinding>        <binding name="tcp_Unsecured">          <security mode="None" />        </binding>      </netTcpBinding>    </bindings>    <client />  </system.serviceModel></configuration>

客户端

下面的代码和配置应独立运行。请执行下列操作之一:

  • 使用代码(和客户端代码)创建独立客户端。
  • 创建不定义任何终结点地址的客户端。而使用将配置名称作为参数的客户端构造函数。例如:
代码

以下代码演示一个使用 TCP 协议访问不安全终结点的基本 WCF 客户端。

配置

下面的配置代码应用于客户端:

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <bindings>      <netTcpBinding>        <binding name="NetTcpBinding_ICalculator" >          <security mode="None">          </security>        </binding>      </netTcpBinding>    </bindings>    <client>      <endpoint address="net.tcp://machineName:8008/Calculator "                binding="netTcpBinding"                 bindingConfiguration="NetTcpBinding_ICalculator"                contract="ICalculator"                 name="NetTcpBinding_ICalculator" />    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 11:45 kim zeng 阅读(49) | 评论(0) | 编辑

WCF常用安全方案(一)

不安全的 Internet 客户端和服务

下面的插图演示了一个公共的、不安全的 Windows Communication Foundation (WCF) 客户端和服务的示例。

不安全的 Internet 客户端和服务方案

 

特征 说明

安全模式

传输

HTTP

绑定

在代码中使用 BasicHttpBinding,或在配置中使用 <basicHttpBinding> 元素。

互操作性

与现有的 Web 服务客户端和服务进行互操作

身份验证

None

完整性

None

保密性

None

服务

下面的代码和配置将独立运行。执行下列操作之一:

  • 使用代码(而不使用配置)创建独立服务。
  • 使用提供的配置创建服务,但不定义任何终结点。
代码

下面的代码演示如何创建不安全的终结点。默认情况下,BasicHttpBinding 将安全模式设置为 None

服务配置

下面的代码使用配置设置相同的终结点。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <behaviors />    <services>      <service behaviorConfiguration="" name="ServiceModel.Calculator">        <endpoint address="http://localhost/Calculator"                   binding="basicHttpBinding"                  bindingConfiguration="Basic_Unsecured"                   name="BasicHttp_ICalculator"                  contract="ServiceModel.ICalculator" />      </service>    </services>    <bindings>      <basicHttpBinding>        <binding name="Basic_Unsecured" />      </basicHttpBinding>    </bindings>    <client />  </system.serviceModel></configuration>

客户端

下面的代码和配置将独立运行。执行下列操作之一:

  • 使用代码(和客户端代码)创建独立客户端。
  • 创建不定义任何终结点地址的客户端。而使用将配置名称作为参数的客户端构造函数。例如:
代码

下面的代码演示一个访问不安全终结点的基本 WCF 客户端。

客户端配置

下面的代码将配置客户端。

<?xml version="1.0" encoding="utf-8"?><configuration>  <system.serviceModel>    <bindings>      <basicHttpBinding>        <binding name="BasicHttpBinding_ICalculator" >          <security mode="None">          </security>        </binding>      </basicHttpBinding>    </bindings>    <client>      <endpoint address="http://localhost/Calculator/Unsecured"          binding="basicHttpBinding"           bindingConfiguration="BasicHttpBinding_ICalculator"          contract="ICalculator"           name="BasicHttpBinding_ICalculator" />    </client>  </system.serviceModel></configuration>

posted @ 2009-12-11 11:43 kim zeng 阅读(44) | 评论(0) | 编辑

WCF 安全模式

Windows Communication Foundation (WCF) 安全分为三个主要功能区域:传输安全、访问控制和审核。传输安全提供完整性、保密性和身份验证。传输安全由传送安全、消息安全或TransportWithMessageCredential 实现。

有关 WCF 消息安全的概述,请参见安全性概述。有关 其他两种 WCF 安全的更多信息,请参见授权审核安全事件

传输安全方案

使用 WCF 传输安全的常见方案包括:

  • 使用 Windows 确保传输安全。WCF 客户端和服务部署在 Windows 域(或 Windows 目录林)中。消息包含个人数据,因此要求客户端和服务相互进行身份验证,要求实现消息完整性和消息保密性。此外,还需要有已发生特定事务的证明,例如,消息的接收方应记录签名信息。
  • 使用 UserName 和 HTTPS 确保传输安全。WCF 客户端和服务需要一些开发工作,以便通过 Internet 工作。客户端凭据根据数据库(其中的内容为用户名/密码对)进行身份验证。服务是用受信任的安全套接字层 (SSL) 证书部署在一个 HTTPS 地址的。由于消息是通过 Internet 传输的,因此,客户端和服务需要相互进行身份验证,并且必须在传输过程中保持消息的保密性和完整性。
  • 使用证书确保传输安全。WCF 客户端和服务需要一些开发工作,以便通过公共 Internet 工作。客户端和服务都具有可用于确保消息安全的证书。客户端和服务通过 Internet 进行相互通信,执行要求消息完整性、保密性和相互身份验证的重要事务。

完整性、保密性和身份验证

三项功能 — 完整性、保密性和身份验证 — 合称为传输安全。传输安全提供的这些功能,有助于减轻对分布式应用程序的威胁。下表简要介绍构成传输安全的三项功能。

 

功能
说明

完整性

完整性可以确保数据是完整、准确的,在数据从一点移动到另一点,并可能由多个操作者读取的情况下,尤其如此。完整性必须得到维护,以免数据被篡改,这通常是由消息的数字签名实现的。

保密性

保密性可以确保消息不被目标读取者以外的任何人读取。例如,信用卡号在通过 Internet 发送时必须保密。保密性通常是用公钥/私钥方案进行数据加密实现的。

身份验证

身份验证是对已声明标识进行的验证。例如,当使用银行帐户时,必须只允许帐户的实际所有者取款。有多种方式可以实现身份验证。一个常用方法是使用用户/密码系统。第二个方法是使用第三方提供的 X.509 证书。

安全模式

WCF 有多种传输安全模式,如下表所述。

 

模式
说明

None

传输层和消息层都不提供安全措施。默认情况下,预定义绑定都不使用此模式,只有 <basicHttpBinding> 元素(使用代码时,则为 BasicHttpBinding 类)例外。

Transport

使用安全传送(如 HTTPS)实现完整性、保密性和相互身份验证。

Message

使用 SOAP 消息安全实现完整性、保密性和相互身份验证。SOAP 消息是按照 WS-Security 标准获得保护的。

混合模式

使用传送安全实现完整性、保密性和服务器身份验证。使用消息安全(WS-Security 和其他标准)实现客户端身份验证。

(此模式的枚举值是 TransportWithMessageCredential。)

消息和传送

在传送级别和消息级别都执行保护和身份验证。此模式仅在 <netMsmqBinding> 元素中可用。

凭据和传输安全

凭据是一些数据,用于证实已声明标识或功能。出示凭据包括出示数据以及数据的所有权证明。WCF 在传输和消息安全级别支持多种凭据类型。您可以为 WCF 绑定指定凭据类型。

在许多国家和地区,驾驶执照就是凭据的一个示例。该执照中包含表示个人身份和能力的数据。它以持有人照片的形式包含所有权证明。该执照由受信任的颁发机构颁发,通常是获得许可的政府部门。该执照采用密封形式且包含一张全息图,表明它未经改动或伪造。

例如,考虑 WCF 中支持的两种凭据类型:用户名和 (X.509) 证书凭据。

对于用户名凭据,用户名表示已声明标识,密码表示所有权证明。这种情况下,受信任的颁发机构则是验证用户名和密码的系统。

在证书凭据中,主题名称、主题备用名称或证书中的特定字段可用于表示已声明标识和/或功能。凭据中的数据所有权证明的建立,是用关联私钥生成签名实现的。

有关 传输安全编程和指定凭据的更多信息,请参见绑定与安全WCF 中的安全行为

传送客户端凭据类型

下表列出了在创建使用传输安全的应用程序时可能使用的值。在代码或绑定设置中,可以使用这些值。

 

设置
说明

None

指定客户端不需要提供任何凭据。这相当于匿名客户端。

Basic

指定基本身份验证。有关其他信息,请参见 RFC2617“HTTP 身份验证:基本和摘要式身份验证(可能为英文网页)。”

Digest

指定摘要式身份验证。有关其他信息,请参见 RFC2617“HTTP 身份验证:基本和摘要式身份验证(可能为英文网页)。”

Ntlm

指定在 Windows 域中使用 SSPI 协商进行 Windows 身份验证。

要使用 SSPI 协商,就需要使用 Kerberos 协议或 NT LanMan (NTLM)。

Windows

指定在 Windows 域中使用 SSPI 进行 Windows 身份验证。SSPI 选择 Kerberos 协议或 NTLM 作为身份验证服务。

SSPI 首先尝试 Kerberos 协议;如果失败,则使用 NTLM。

Certificate

使用证书(通常是 X.509)执行客户端身份验证。

消息客户端凭据类型

下表列出了在创建使用消息安全的应用程序时可能使用的值。在代码或绑定设置中,可以使用这些值。

 

设置
说明

None

允许服务与匿名客户端交互。

Windows

允许在 Windows 凭据的已通过身份验证的上下文中执行 SOAP 消息交换。使用 SSPI 协商机制选择 Kerberos 协议或 NTLM 作为身份验证服务。

Username

允许服务可以要求使用用户名凭据对客户端进行身份验证。请注意,WCF 不允许对用户名进行任何加密操作,例如生成签名或加密数据。因此,WCF 强制要求在使用用户名凭据时确保传输的安全性。

证书

允许服务要求使用证书对客户端进行身份验证。

CardSpace

允许服务要求使用 CardSpace 对客户端进行身份验证。

凭据编程

对于每个客户端凭据类型,WCF 编程模型都允许通过服务行为和通道行为来指定凭据值和凭据验证程序。

WCF 安全有两种凭据类型:服务凭据行为和通道凭据行为。WCF 中的凭据行为指定实际数据,即用于满足安全要求(通过绑定表示)的凭据。在 WCF 中,客户端类是运行时组件,它在操作调用和消息之间进行转换。所有客户端都是从 ClientBase 类继承的。通过基类的 ClientCredentials 属性,可以指定不同的客户端凭据值。

在 WCF 中,服务行为是一些属性,它们在实现服务协定(接口)的类中应用,以编程方式对服务进行控制。使用 ServiceCredentials 类,可以为服务凭据指定证书,也可以为不同的客户端凭据类型指定客户端验证设置。

消息安全的协商模型

在消息安全模式中,通过执行传输安全,可以在客户端带外配置服务凭据。例如,如果使用的是存储在 Windows 证书存储区中的证书,则必须使用一个工具,如 Microsoft 管理控制台 (MMC) 单元。

在消息安全模式中,通过执行传输安全,还可以与客户端交换服务凭据,作为初始协商的一部分。若要启用协商,请将 NegotiateServiceCredential 属性设置为 true

posted @ 2009-12-11 11:27 kim zeng 阅读(136) | 评论(0) | 编辑

WCF安全性概述

Windows Communication Foundation (WCF) 是一个基于 SOAP 消息的分布式编程平台,因此保护客户端和服务之间的消息安全对于保护数据非常重要。WCF 基于现有安全性基础结构和 SOAP 消息的经验证的安全标准提供可互操作的安全消息交换通用平台。

当您使用现有技术(如 HTTPS)、Windows 集成安全性或对用户进行身份验证的用户名和密码生成安全的分布式应用程序时,WCF 将使用熟悉的概念。WCF 不仅与现有安全性基础结构集成,而且还通过使用安全 SOAP 消息将分布式安全性扩展到仅 Windows 域的范围之外。可以将 WCF 视为现有安全机制的一个实现,该安全机制具有将 SOAP 用作现有协议的补充协议的主要优点。例如,用于标识客户端或服务的凭据(如用户名和密码或 X.509 证书)具有可互操作的基于 XML 的 SOAP 配置文件。使用这些配置文件时,消息利用开放式规范(如 XML 数字签名和 XML 加密)进行安全交换。有关规范的列表,请参见系统提供的互操作性绑定支持的 Web 服务协议

另一个并列项是 Windows 平台上的组件对象模型 (COM),它可实现安全的分布式应用程序。COM 具有全面的安全机制,因此安全上下文可以在各组件间流动;此机制可强制实现完整性、保密性和身份验证。但是,COM 无法像 WCF 一样实现跨平台的安全消息传递。通过使用 WCF,您可以在 Internet 范围内跨多个 Windows 域生成服务和客户端。WCF 的可互操作消息对于生成动态业务驱动型服务至关重要,这有助于确保信息的安全性。

Windows Communication Foundation 安全性优点

WCF 是一个基于 SOAP 消息的分布式编程平台。通过使用 WCF,您可以创建可用作服务和服务客户端的应用程序,从无限数量的其他服务和客户端创建和处理消息。在此类分布式应用程序中,消息可以从一个节点流向另一个节点,并在通过防火墙进入 Internet 后再通过无数个 SOAP 中间项。这会带来各种不同的消息安全性威胁。下面的示例演示在实体间交换消息时可由 WCF 安全性帮助缓解的部分常见威胁:

  • 观测网络流量以获取敏感信息。以在线银行为例,某个客户端请求将资金从一个帐户转帐至另一个帐户。一个恶意用户截获了此消息(具有帐号和密码),随后从盗用的帐户将资金转出。
  • 欺诈性实体在客户端未发觉的情况下起服务的作用。在此情况下,恶意用户(欺诈方)充当在线服务,从客户端截获消息以获取敏感信息。然后,欺诈方使用窃取的数据将资金从盗用的帐户转出。此类攻击也称为“钓鱼攻击”。
  • 更改消息以获取与调用方所需的结果不同的结果。例如,更改用于存款的帐号以便将资金转移到恶意帐户。
  • 黑客重放,恶意黑客重放同一采购订单。例如,一家网上书店收到数百张订单并将书籍发送给并未订购这些书籍的客户。
  • 使某项服务无法对客户端进行身份验证。在此情况下,服务无法确保相应人员执行该项事务。

总的来说,传输安全性可提供下列保障:

  • 服务终结点(响应方)身份验证。
  • 客户端主体(发起方)身份验证。
  • 消息完整性。
  • 消息保密性。
  • 重放检测。
与现有安全性基础结构集成

通常,Web 服务部署都具有现成的安全性解决方案,例如,安全套接字层 (SSL) 或 Kerberos 协议。某些服务则利用已部署的安全性基础结构,例如,使用 Active Directory 的 Windows 域。当评估和采用新服务时,通常需要与这些现有技术集成。

WCF 安全性与现有传输安全模型集成,并且可对基于 SOAP 消息安全的新传输安全模型使用现有基础结构。

与现有身份验证模型集成

任何通信安全模型的一个重要组成部分就是能够识别正在通信的实体并对其进行身份验证。这些通信中的实体使用“数字标识”或凭据向通信对等方验证自己的身份。随着分布式通信平台的发展,已实现多种不同的凭据身份验证和相关的安全模型。例如,在 Internet 中,通常使用用户名和密码标识用户。在 Intranet 中,使用 Kerberos 域控制器备份用户和服务身份验证变得越来越普遍。在某些特定情况下,例如两个业务合作伙伴之间,证书可用于对合作伙伴的身份进行相互验证。

因此,在 Web 服务领域中,同样的服务可向内部企业客户公开,也可向外部合作伙伴或 Internet 客户公开,重要的是基础结构可提供与这些现有安全身份验证模型的集成。WCF 安全性支持多种凭据类型(身份验证模型),其中包括:

  • 匿名调用方。
  • 用户名客
365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/archives/220.html