<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

可选。一个布尔值,指定是否可以在答复时使用序列化令牌。

authenticationMode

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

默认值为 sspiNegotiated

defaultAlgorithmSuite

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

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

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

includeTimestamp

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

keyEntropyMode

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

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

默认值为 CombinedEntropy

此属性的类型为 SecurityKeyEntropyMode

messageProtectionOrder

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

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

默认值为 SignBeforeEncrypt

此属性的类型为 MessageProtectionOrder

messageSecurityVersion

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

  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11
  • WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10

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

requireDerivedKeys

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

requireSecurityContextCancellation

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

requireSignatureConfirmation

可选。一个布尔值,指定是否启用 WS-Security 签名确认。当设置为 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