作法:設定安全性模式
Windows Communication Foundation (WCF) 安全性具有三種常見的安全性模式,可在下列最預先定義的繫結中找到:傳輸、訊息與「使用訊息認證進行傳輸」。另外有兩種額外的模式適用於下列兩種繫結:BasicHttpBinding 上的「僅限傳輸-認證」以及 NetMsmqBinding 上的「兩者並存」模式。 然而,此主題將著重在三種常見的安全性模式:Transport、Message 與 TransportWithMessageCredential。
請注意,並非所有預先定義的繫結都支援這些模式。 本主題將使用 WSHttpBinding 和 NetTcpBinding 類別來設定模式,並示範如何以程式設計方式及透過組態來設定模式。
如需詳細資訊,請參閱 WCF 安全性、安全性概觀、保護服務的安全,以及確保服務與用戶端的安全。 如需傳輸模式和訊息的詳細資訊,請參閱傳輸安全性和訊息安全性。
若要在程式碼中設定安全性模式
針對您正在使用的繫結類別建立執行個體。 如需預先定義的繫結清單,請參閱系統提供的繫結。 下列範例會建立 WSHttpBinding 類別的執行個體。
針對
Mode
屬性傳回的物件,設定其Security
屬性。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
另外,如下列程式碼所示,設定訊息的模式。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message
或者,如下列程式碼所示,使用訊息認證來設定傳輸的模式。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential
您也可以如下列程式碼所示,在繫結的建構函式中設定模式。
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Dim b As New WSHttpBinding(SecurityMode.Message)
設定 ClientCredentialType 屬性
將模式設為三個值中的其中一個值,可決定您設定 ClientCredentialType
屬性的方式。 例如,使用 WSHttpBinding 類別並將模式設為 Transport
時,代表您必須將 ClientCredentialType 類別的 HttpTransportSecurity 屬性設為適當值。
若要設定傳輸模式的 ClientCredentialType 屬性
建立繫結的執行個體。
將
Mode
屬性設為Transport
。將
ClientCredential
屬性設定為適當值。 下列程式碼會將屬性設為Windows
。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
若要設定訊息模式的 ClientCredentialType 屬性
建立繫結的執行個體。
將
Mode
屬性設為Message
。將
ClientCredential
屬性設定為適當值。 下列程式碼會將屬性設為Certificate
。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
若要在組態中設定 Mode 與 ClientCredentialType 屬性
將適當的繫結元素新增至組態檔的 <bindings> 元素中。 下列範例會新增 <wsHttpBinding> 元素。
新增
<binding>
元素,並將name
屬性設定為適當值。新增
<security>
項目,並將mode
屬性設為Message
、Transport
或TransportWithMessageCredential
。如果模式已設為
Transport
,則新增<transport>
項目並將clientCredential
屬性設為適當值。下列範例會將模式設為 "
Transport"
,然後將clientCredentialType
項目的<transport>
屬性設為 "Windows"
。<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >
另外,將
security mode
設為 "Message"
,並在它後面加上<"message">
項目。 這個範例會將clientCredentialType
設為 "Certificate"
。<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" > <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >
特殊情況下會使用 TransportWithMessageCredential 值 (請參見下列說明)。
使用 TransportWithMessageCredential
當您將安全性模式設為 TransportWithMessageCredential
時,傳輸會決定用來提供傳輸層安全性的實際機制。 例如,HTTP 通訊協定會使用 Secure Sockets Layer (SSL) over HTTP (HTTPS)。 因此,會忽略對任何傳輸安全性物件 (例如 ClientCredentialType
) 的 HttpTransportSecurity 屬性設定。 換句話說,您只能設定訊息安全性物件的 ClientCredentialType
(對 WSHttpBinding
繫結程序來說,指的是 NonDualMessageSecurityOverHttp 物件)。
如需詳細資訊,請參閱操作說明:使用傳輸安全性和訊息認證。