Windows Communication Foundation (WCF) 提供數個模式,可讓用戶端和服務用來相互驗證。 您可以在 SecurityBindingElement 類別上使用靜態方法或透過組態,建立這些驗證模式的安全性繫結項目。 本主題會簡短說明這 18 種驗證模式。
如需針對其中一種驗證模式使用元素的範例,請參閱如何:為指定的驗證模式建立 SecurityBindingElement (機器翻譯)。
基本組態程式設計
下列程序會說明如何使用組態檔來設定驗證模式。
使用組態來設定驗證模式
在 <bindings> 元素中,新增 <customBinding>。
作為子元素,將 <binding> 元素新增至
<customBinding>元素。將
<security>項目加入至<binding>項目。將
authenticationMode屬性設定為下列其中一個描述值。 例如,下列程式碼會將此模式設定為AnonymousForCertificate。<bindings> <customBinding> <binding name="SecureCustomBinding"> <security authenticationMode ="AnonymousForCertificate" /> </binding> </customBinding> </bindings>
以程式設計方式來設定模式
判斷傳回型別,該型別可能是下列其中一種型別:SymmetricSecurityBindingElement、TransportSecurityBindingElement、AsymmetricSecurityBindingElement 或 SecurityBindingElement。
呼叫 SecurityBindingElement 類別的適當靜態方法。 例如,下列程式碼會呼叫 CreateAnonymousForCertificateBindingElement 方法。
SymmetricSecurityBindingElement b = SecurityBindingElement. CreateAnonymousForCertificateBindingElement();Dim b As SymmetricSecurityBindingElement = _ SecurityBindingElement.CreateAnonymousForCertificateBindingElement()使用繫結項目來建立自訂繫結。 如需詳細資訊,請參閱自訂繫結 (機器翻譯)。
模式描述
匿名證書
在此驗證模式中,用戶端為匿名,而服務會使用 X.509 憑證來進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateAnonymousForCertificateBindingElement。 或者,可以將 authenticationMode 元素的 <security> 屬性設定為 AnonymousForCertificate。
SSL協商匿名用戶
使用此認證模式,客戶端保持匿名,服務則透過執行時協商的 X.509 憑證進行認證。 如果為第一個參數傳遞的值是 SymmetricSecurityBindingElement 時,安全性繫結項目就是由 CreateSslNegotiationBindingElement 方法傳回的 false。 或者,可以將 authenticationMode 屬性設定為 AnonymousForSslNegotiated。
透過傳輸的憑證
在此驗證模式中,用戶端會使用出現在 SOAP 層中當做簽署支援權杖 (也就是簽署訊息簽章的權杖) 的 X.509 憑證來進行驗證。 服務會在傳輸層上使用 X.509 憑證來進行驗證。 安全性繫結項目是由 TransportSecurityBindingElement 方法傳回的 CreateCertificateOverTransportBindingElement。 或者,可以將 authenticationMode 屬性設定為 CertificateOverTransport。
簽發的憑證
在此驗證模式中,用戶端本身不會向服務驗證,而是向安全性權杖服務驗證並接收 SAML 權杖,接著將該權杖呈現給伺服器,證明自己知道共用金鑰。 服務本身不會向用戶端驗證,但安全性權杖服務會將共用金鑰加密做為所發出權杖的一部分,這樣就只有服務才能解密該金鑰。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateIssuedTokenBindingElement。 或者,可以將 authenticationMode 屬性設定為 IssuedToken。
發行憑證代幣
在此驗證模式中,用戶端本身不會向服務驗證,而是向安全性權杖服務驗證並接收 SAML 權杖,接著將該權杖呈現給伺服器,證明自己知道共用金鑰。 發出的權杖會當做簽署支援權杖或持有人權杖 (也就是簽署訊息簽章的權杖) 出現在 SOAP 層中。 服務會使用 X.509 憑證對用戶端進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateIssuedTokenForCertificateBindingElement。 或者,可以將 authenticationMode 屬性設定為 IssuedTokenForCertificate。
已發行的憑證用於SSL協商
在此驗證模式中,用戶端本身不會向服務驗證,而是向安全性權杖服務驗證並接收 SAML 權杖,接著將該權杖呈現給伺服器,證明自己知道共用金鑰。 發出的權杖會當做簽署支援權杖或持有人權杖 (也就是簽署訊息簽章的權杖) 出現在 SOAP 層中。 服務會使用 X.509 憑證來進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateIssuedTokenForSslBindingElement。 或者,可以將 authenticationMode 屬性設定為 IssuedTokenForSslNegotiated。
透過傳輸的已發行令牌
在此驗證模式中,用戶端本身不會向服務驗證,而是向安全性權杖服務驗證並接收 SAML 權杖,接著將該權杖呈現給伺服器,證明自己知道共用金鑰。 發出的權杖會當做簽署支援權杖或持有人權杖 (也就是簽署訊息簽章的權杖) 出現在 SOAP 層中。 服務會在傳輸層上使用 X.509 憑證來進行驗證。 安全性繫結項目是由 TransportSecurityBindingElement 方法傳回的 CreateIssuedTokenOverTransportBindingElement。 或者,可以將 authenticationMode 屬性設定為 IssuedTokenOverTransport。
Kerberos
在此驗證模式中,用戶端會使用 Kerberos 票證向服務進行驗證。 相同的票證也會提供伺服器驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateKerberosBindingElement。 或者,可以將 authenticationMode 屬性設定為 Kerberos。
注意
為了使用此驗證模式,服務帳戶必須與某個服務主要名稱 (SPN) 相關聯。 如果要這樣做,請以 NETWORK SERVICE 帳戶或 LOCAL SYSTEM 帳戶執行此服務。 或者,使用 SetSpn.exe 工具來建立服務帳戶的 SPN。 不論是何種情況,用戶端都必須在 <servicePrincipalName> 元素中使用正確的 SPN,或是使用 EndpointAddress 建構函式。 如需詳細資訊,請參閱服務識別和驗證 (機器翻譯)。
注意
當使用 Kerberos 驗證模式時,就不會支援 Anonymous 與 Delegation 模擬等級。
KerberosOverTransport
在此驗證模式中,用戶端會使用 Kerberos 票證向服務進行驗證。 Kerberos 權杖會當做簽署支援權杖 (也就是簽署訊息簽章的權杖) 出現在 SOAP 層中。 服務會在傳輸層上使用 X.509 憑證來進行驗證。 安全性繫結項目是由 TransportSecurityBindingElement 方法傳回的 CreateKerberosOverTransportBindingElement。 或者,可以將 authenticationMode 屬性設定為 KerberosOverTransport。
注意
為了使用此驗證模式,服務帳戶必須與某個 SPN 相關聯。 如果要這樣做,請以 NETWORK SERVICE 帳戶或 LOCAL SYSTEM 帳戶執行此服務。 或者,使用 SetSpn.exe 工具來建立服務帳戶的 SPN。 不論是何種情況,用戶端都必須在 <servicePrincipalName> 元素中使用正確的 SPN,或是使用 EndpointAddress 建構函式。 如需詳細資訊,請參閱服務識別和驗證 (機器翻譯)。
互惠證書
在此驗證模式中,用戶端會使用出現在 SOAP 層中當做簽署支援權杖 (也就是簽署訊息簽章的權杖) 的 X.509 憑證來進行驗證。 服務也會使用 X.509 憑證來進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateMutualCertificateBindingElement。 或者,可以將 authenticationMode 屬性設定為 MutualCertificate。
MutualCertificateDuplex
在此驗證模式中,用戶端會使用出現在 SOAP 層中當做簽署支援權杖 (也就是簽署訊息簽章的權杖) 的 X.509 憑證來進行驗證。 服務也會使用 X.509 憑證來進行驗證。 繫結是由 AsymmetricSecurityBindingElement 方法傳回的 CreateMutualCertificateDuplexBindingElement。 或者,可以將 authenticationMode 屬性設定為 MutualCertificateDuplex。
協商互惠 SSL
在此驗證模式中,用戶端和服務會使用 X.509 憑證來進行驗證。 如果為第一個參數傳遞的值是 SymmetricSecurityBindingElement 時,安全性繫結項目就是由 CreateSslNegotiationBindingElement 方法傳回的 true。 或者,可以將 authenticationMode 屬性設定為 MutualSslNegotiated。
安全對話
安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateSecureConversationBindingElement。 這個方法會將 SecurityBindingElement 當做參數接受,而該項目會在初始化期間用來建立安全工作階段。 或者,可以將 authenticationMode 屬性設定為 SecureConversation。
如果沒有指定啟動安裝繫結,便會為啟動安裝使用 SspiNegotiated 驗證模式。
SspiNegotiation
在此驗證模式中,將使用交涉通訊協定來執行用戶端和伺服器驗證。 如果可能,便會使用 Kerberos,否則會使用 NT LanMan (NTLM)。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateSspiNegotiationBindingElement。 或者,可以將 authenticationMode 屬性設定為 SspiNegotiated。
基於傳輸的SSPI協商
在此驗證模式中,將使用交涉通訊協定來執行用戶端和伺服器驗證。 如果可能,便會使用 Kerberos 通訊協定,否則會使用 NTLM。 產生的權杖會當做簽署支援權杖 (也就是簽署訊息簽章的權杖) 出現在 SOAP 層中。 此外,服務也會在傳輸層上使用 X.509 憑證來進行驗證。 安全性繫結項目是由 TransportSecurityBindingElement 方法傳回的 CreateSspiNegotiationOverTransportBindingElement。 或者,可以將 authenticationMode 屬性設定為 SspiNegotiatedOverTransport。
憑證用戶名
在此驗證模式中,用戶端會使用當做簽署支援權杖 (也就是由訊息簽章簽署的權杖) 出現在 SOAP 層中的「使用者名稱權杖」向服務進行驗證。 服務會使用 X.509 憑證對用戶端進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateUserNameForCertificateBindingElement。 或者,可以將 authenticationMode 屬性設定為 UserNameForCertificate。
在 UserNameForCertificate 驗證模式中,用戶端與服務都必須使用 WS-Security 1.1。
用於 SSL 協商的使用者名稱 (UserNameForSslNegotiated)
在此驗證模式中,用戶端會使用當做簽署支援權杖 (也就是由訊息簽章簽署的權杖) 出現在 SOAP 層中的「使用者名稱權杖」進行驗證。 服務會使用 X.509 憑證來進行驗證。 安全性繫結項目是由 SymmetricSecurityBindingElement 方法傳回的 CreateUserNameForSslBindingElement。 或者,可以將 authenticationMode 屬性設定為 UserNameForSslNegotiated。
使用者名稱透過傳輸
在此驗證模式中,用戶端會使用當做簽署支援權杖 (也就是由訊息簽章簽署的權杖) 出現在 SOAP 層中的「使用者名稱權杖」進行驗證。 服務會在傳輸層上使用 X.509 憑證來進行驗證。 安全性繫結項目是由 TransportSecurityBindingElement 方法傳回的 CreateUserNameOverTransportBindingElement。 或者,可以將 authenticationMode 屬性設定為 UserNameOverTransport。