共用方式為


<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:除了安全性標頭中的第一個項目必須是 wsse:Timestamp 項目之外,其他項目都會依據符合 WSS: SOAP 訊息安全性的任何順序,加入至安全性標頭中。

  • LaxWithTimestampLast:除了安全性標頭中的最後一個項目必須是 wsse:Timestamp 項目之外,其他項目都會依據符合 WSS: SOAP 訊息安全性的任何順序,加入至安全性標頭中。

預設為 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