受信任的子系統
用戶端會存取分散在網路上的一或多個 Web 服務。Web 服務的設計會將對其他資源 (例如資料庫或其他 Web 服務) 的存取封裝在 Web 服務的商務邏輯中。這些資源必須受到保護,以避免未經授權的存取。下圖說明受信任的子系統處理序。
下列步驟說明受信任的子系統處理序,如圖所示:
- 用戶端將要求和認證提交至受信任的子系統。
- 受信任的子系統會驗證並授權使用者。
- 受信任的子系統將要求訊息傳送至遠端資源。這個要求會伴隨受信任子系統的認證 (或執行受信任子系統處理序所使用的服務帳戶)。
- 後端資源會驗證並授權受信任的子系統。然後,處理要求並將回應發出至受信任的子系統。
- 受信任的子系統會處理回應,並將自己的回應發出至用戶端。
特性 | 描述 |
---|---|
安全性模式 |
訊息 |
互通性 |
僅限 Windows Communication Foundation (WCF)。 |
驗證 (服務) |
安全性權杖服務會驗證並授權用戶端。 |
驗證 (用戶端) |
受信任的子系統會驗證用戶端,而資源會驗證受信任的子系統服務。 |
完整性 |
是 |
機密性 |
是 |
傳輸 |
用戶端與受信任子系統服務之間的 HTTP。 受信任子系統服務與資源 (後端服務) 之間的 NET.TCP。 |
繫結 |
WSHttpBinding 和NetTcpBinding9c3312b4-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>