共用方式為


受信任的子系統

用戶端會存取分散在網路上的一或多個 Web 服務。Web 服務的設計會將對其他資源 (例如資料庫或其他 Web 服務) 的存取封裝在 Web 服務的商務邏輯中。這些資源必須受到保護,以避免未經授權的存取。下圖說明受信任的子系統處理序。

受信任的子系統

下列步驟說明受信任的子系統處理序,如圖所示:

  1. 用戶端將要求和認證提交至受信任的子系統。
  2. 受信任的子系統會驗證並授權使用者。
  3. 受信任的子系統將要求訊息傳送至遠端資源。這個要求會伴隨受信任子系統的認證 (或執行受信任子系統處理序所使用的服務帳戶)。
  4. 後端資源會驗證並授權受信任的子系統。然後,處理要求並將回應發出至受信任的子系統。
  5. 受信任的子系統會處理回應,並將自己的回應發出至用戶端。
特性 描述

安全性模式

訊息

互通性

僅限 Windows Communication Foundation (WCF)。

驗證 (服務)

安全性權杖服務會驗證並授權用戶端。

驗證 (用戶端)

受信任的子系統會驗證用戶端,而資源會驗證受信任的子系統服務。

完整性

機密性

傳輸

用戶端與受信任子系統服務之間的 HTTP。

受信任子系統服務與資源 (後端服務) 之間的 NET.TCP。

繫結

WSHttpBindingNetTcpBinding9c3312b4-2137-4e71-bf3f-de1cf8e9be79

資源 (後端服務)

程式碼

下列程式碼示範如何建立資源的服務端點,這個服務端點會透過 TCP 傳輸通訊協定使用傳輸安全性。

組態

下列組態會使用組態來設定相同端點。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.BackendService"
               behaviorConfiguration="BackendServiceBehavior">
        <endpoint address="net.tcp://localhost.com:8001/BackendService"
                  binding="customBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator"/>
      </service>
    </services>
    <bindings>
      <customBinding>
        <binding name="Binding1">
          <security authenticationMode="UserNameOverTransport"/>
          <windowsStreamSecurity/>
          <tcpTransport/>
        </binding>
      </customBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BackendServiceBehavior">
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom"
                                    customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyUserNamePasswordValidator, BackendService"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

受信任的子系統

程式碼

下列程式碼示範如何建立受信任子系統的服務端點,這個服務端點會透過 HTTP 通訊協定使用訊息安全性,並且使用使用者名稱和密碼進行驗證。

下列程式碼示範受信任子系統中的服務透過 TCP 傳輸通訊協定,使用傳輸安全性與後端服務進行通訊。

組態

下列組態會使用組態來設定相同端點。請注意兩個繫結,一個會保護受信任子系統所裝載的服務,另一個則會在受信任子系統和後端服務之間進行通訊。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.FacadeService"
               behaviorConfiguration="FacadeServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:8000/FacadeService"/>
          </baseAddresses>
        </host>
        <endpoint address="https://localhost:8000/FacadeService"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator"/>
      </service>
    </services>
    <client>
      <endpoint name="" 
                address="net.tcp://contoso.com:8001/BackendService"
                binding="customBinding"
                bindingConfiguration="ClientBinding"
                contract="Microsoft.ServiceModel.Samples.ICalculator"/>
    </client>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1">
          <security mode="Message">
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </wsHttpBinding>
      <customBinding>
        <binding name="ClientBinding">
          <security authenticationMode="UserNameOverTransport"/>
          <windowsStreamSecurity/>
          <tcpTransport/>
        </binding>
      </customBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="FacadeServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceCredentials>
            <serviceCertificate findValue="Contoso.com"
                                storeLocation="LocalMachine"
                                storeName="My"
                                x509FindType="FindBySubjectName" />
            <userNameAuthentication userNamePasswordValidationMode="Custom"
                                    customUserNamePasswordValidatorType="Microsoft.ServiceModel.Samples.MyUserNamePasswordValidator, FacadeService"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

用戶端

程式碼

下列程式碼示範如何建立用戶端,這個用戶端會透過 HTTP 通訊協定使用訊息安全性,並且使用使用者名稱和密碼進行驗證,藉此與受信任的子系統進行通訊。

組態

下列程式碼會將用戶端設定為透過 HTTP 通訊協定使用訊息安全性,並且使用使用者名稱和密碼進行驗證。使用者名稱和密碼只能使用程式碼 (它是不可設定的) 來指定。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
        <endpoint name="" 
                  address="http://www.cohowinery.com:8000/FacadeService"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding1"
                  behaviorConfiguration="ClientUserNameBehavior"
                  contract="Microsoft.ServiceModel.Samples.ICalculator"/>
    </client>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1">
          <security mode="Message">
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ClientUserNameBehavior">
          <clientCredentials>
            <serviceCertificate>
              <authentication certificateValidationMode="PeerOrChainTrust"/>
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

請參閱

概念

安全性概觀