<customBinding> 的 <security>

指定自定义绑定的安全选项。

架构层次结构

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding>
        <customBinding> 的 <security>

语法

<security 
   allowSerializedSigningTokenOnReply="Boolean"
   authenticationMode="AuthenticationMode"
      defaultAlgorithmSuite="SecurityAlgorithmSuite"
   includeTimestamp="Boolean"
      requireDerivedKeys="Boolean"
   keyEntropyMode="ClientEntropy/ServerEntropy/CombinedEntropy" 
messageProtectionOrder="SignBeforeEncrypt/SignBeforeEncryptAndEncryptSignature/EncryptBeforeSign"
      messageSecurityVersion="WSSecurityJan2004/WSSecurityXXX2005"
   requireDerivedKeys="Boolean"
   requireSecurityContextCancellation="Boolean"
   requireSignatureConfirmation="Boolean"
      securityHeaderLayout=
              "Strict/Lax/LaxTimestampFirst/LaxTimestampLast"
   includeTimestamp="Boolean">
   <issuedTokenParameters />
   <localClientSettings />
   <localServiceSettings />
   <secureConversationBootstrap />
</security>

属性和元素

以下几节描述了特性、子元素和父元素

属性

特性 说明

allowSerializedSigningTokenOnReply

可选。一个布尔值,指定是否可以在答复时使用序列化令牌。默认值为 false。使用双向绑定时,默认设置为 true 并忽略所做的任何设置。

authenticationMode

可选。指定在发起方和响应方之间使用的身份验证模式。请参见下面所有的值。

默认值为 sspiNegotiated

defaultAlgorithmSuite

可选。设置消息加密和密钥包装算法。算法和密钥大小由 SecurityAlgorithmSuite 类确定。这些算法映射到安全策略语言 (WS-SecurityPolicy) 规范中指定的算法。

以下显示了可能的值。默认值为 Basic256

此属性与选取不同于默认算法的算法集的其他平台一起使用。在对此设置进行修改时,应该注意相关算法的优缺点。此特性的类型为 SecurityAlgorithmSuite

includeTimestamp

一个布尔值,指定是否每个消息都包含时间戳。默认值为 true

keyEntropyMode

指定用于保护消息的密钥的计算方法。密钥只能基于客户端密钥材料、服务密钥材料或两者的组合。有效值为

  • ClientEntropy:此会话密钥基于客户端提供的密钥数据。

  • ServerEntropy:此会话密钥基于服务器提供的密钥数据。

  • CombinedEntropy:此会话密钥基于客户端和服务提供的密钥数据。

默认值为 CombinedEntropy

此特性的类型为 SecurityKeyEntropyMode

messageProtectionOrder

设置对消息应用消息级安全算法的顺序。包括以下有效值:

  • SignBeforeEncrypt:先签名,然后加密。

  • SignBeforeEncryptAndEncryptSignature:先签名,再加密,然后再对签名进行加密。

  • EncryptBeforeSign:先加密,然后签名。

默认值取决于所使用的 WS-Security 版本。使用 WS-Security 1.1 时,默认值为 SignBeforeEncryptAndEncryptSignature。使用 WS-Security 1.0 时,默认值为 SignBeforeEncrypt

此特性的类型为 MessageProtectionOrder

messageSecurityVersion

可选。设置所使用的 WS-Security 的版本。包括以下有效值:

  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11

  • WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10

  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10

默认值是 WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11,且该默认值在 XML 中可以简单地表示为 Default。此特性的类型为 MessageSecurityVersion

requireDerivedKeys

一个布尔值,指定是否可以从原始校验密钥中派生密钥。默认值为 true

requireSecurityContextCancellation

可选。一个布尔值,指定当不再需要安全上下文时是否应将其取消和终止。默认值为 true

requireSignatureConfirmation

可选。一个布尔值,指定是否启用 WS-Security 签名确认。当设置为 true 时,消息签名由响应方进行确认。为相互证书配置自定义绑定时或将自定义绑定配置为使用所颁发的令牌(WSS 1.1 绑定)时,此特性默认为 true。否则,默认为 false

签名确认用于确认服务正在完全知晓请求的情况下做出响应。

securityHeaderLayout

可选。指定安全头中元素的排序。有效值为

  • Strict:项按照“先声明后使用”的一般原则添加到安全头中。

  • Lax:项以任何符合 WSS: SOAP 消息安全的顺序添加到安全标头中。

  • LaxWithTimestampFirst:项以任何符合 WSS: SOAP 消息安全的顺序添加到安全头中,但安全头中的第一个元素必须是 wsse:Timestamp 元素。

  • LaxWithTimestampLast:项以任何符合 WSS: SOAP 消息安全的顺序添加到安全头中,但安全头中的最后一个元素必须是 wsse:Timestamp 元素。

默认值为 Strict

此元素的类型为 SecurityHeaderLayout

子元素

元素 说明

<issuedTokenParameters>

指定一个当前颁发的令牌。此元素的类型为 IssuedTokenParametersElement

<localClientSettings> 元素

指定此绑定的本地客户端安全设置。此元素的类型为 LocalClientSecuritySettingsElement

<localServiceSettings> 元素

指定此绑定的本地服务安全设置。此元素的类型为 LocalServiceSecuritySettingsElement

<secureConversationBootstrap>

指定用于启动安全对话服务的默认值。

父元素

元素 说明

<binding>

定义自定义绑定的所有绑定功能。

备注

有关使用此元素的更多信息,请参见 SecurityBindingElement Authentication ModesHow To: Create a Custom Binding Using the SecurityBindingElement

示例

下面的示例演示如何使用自定义绑定配置安全性。并演示如何使用自定义绑定实现消息级安全性和安全传输。如果在客户端和服务之间传输消息时需要进行安全的传输,同时消息必须在消息级别上保持安全,这非常有用。系统提供的绑定不支持此配置。

服务配置定义了一个自定义绑定,该绑定支持使用 TLS/SSL 协议和 Windows 消息安全性保护的 TCP 通信。此自定义绑定使用服务证书在传输级别对服务进行身份验证,并且在客户端与服务之间传输消息时保护消息。这是通过 <sslStreamSecurity> 绑定元素实现的。服务的证书是使用服务行为配置的。

此外,此自定义绑定将消息安全性与 Windows 凭据类型(默认凭据类型)一起使用。这是通过 <customBinding> 的 <security> 绑定元素实现的。如果 Kerberos 身份验证机制可用,则将使用消息级安全性对客户端和服务进行身份验证。如果 Kerberos 身份验证机制不可用,则使用 NTLM 身份验证。NTLM 向服务对客户端进行身份验证,但不向客户端对服务进行身份验证。<customBinding> 的 <security> 绑定元素配置为使用 SecureConversation authenticationType,这将导致在客户端和服务器上创建安全会话。为了使服务的双工协定起作用,需要这么做。有关运行此示例的更多信息,请参见Custom Binding Security

<configuration>
  <system.serviceModel>
    <services>
      <service 
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
        <host>
          <baseAddresses>
            <!-- use following base address -->
            <add baseAddress="net.tcp://localhost:8000/ServiceModelSamples/Service"/>
          </baseAddresses>
        </host>
        <endpoint address=""
                    binding="customBinding"
                    bindingConfiguration="Binding1" 
                    contract="Microsoft.ServiceModel.Samples.ICalculatorDuplex" />
        <!-- the mex endpoint is exposed at net.tcp://localhost:8000/ServiceModelSamples/service/mex -->
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <bindings>
      <!-- configure a custom binding -->
      <customBinding>
        <binding name="Binding1">
          <security authenticationMode="SecureConversation"
                     requireSecurityContextCancellation="true">
          </security>
          <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>
          <sslStreamSecurity requireClientCertificate="false"/>
          <tcpTransport/>
        </binding>
      </customBinding>
    </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
          <serviceCredentials>
            <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

另请参见

参考

<customBinding>
SecurityElement
SecurityBindingElement
CustomBinding

其他资源

Windows Communication Foundation Bindings
Extending Bindings
Custom Bindings
How To: Create a Custom Binding Using the SecurityBindingElement
Custom Binding Security