共用方式為


分散式應用程式安全性

Windows Communication Foundation (WCF) 安全性可細分為三項主要功能領域:傳輸安全性、存取控制以及稽核。 傳輸安全性提供完整性、機密性與驗證。 傳輸安全性是由下列其中一項提供:傳輸安全性、訊息安全性或 TransportWithMessageCredential

如需 WCF 訊息安全性的概觀,請參閱安全性概觀。 如需了解 WCF 安全性其他兩個部分的詳細資訊,請參閱授權稽核

傳輸安全性案例

採用 WCF 傳輸安全性的常見案例包含下列各項:

  • 使用 Windows 保護傳輸。 WCF 用戶端及服務部署於 Windows 網域中 (或 Windows 樹系)。 由於訊息包含個人資料,因此要求會包括用戶端和服務的雙向驗證、訊息完整性及訊息機密性。 此外,特殊交易發生時需要證明,例如訊息接收者應記錄簽章資訊。

  • 使用 UserName 和 HTTPS 保護傳輸。 WCF 用戶端和服務需要經過開發才能在網際網路中運作。 用戶端認證會根據使用者名稱/密碼組的資料庫進行驗證。 服務會使用受信任的安全通訊端層 (SSL) 憑證部署在 HTTPS 位址。 由於訊息會透過網際網路傳輸,因此用戶端和服務需要經過雙向驗證,而且必須維持傳輸期間訊息的機密性與完整性。

  • 使用憑證保護傳輸。 WCF 用戶端和服務需要經過開發才能透過公用網際網路運作。 用戶端和服務都有憑證,可以用來保護訊息的安全。 用戶端和服務會使用網際網路彼此通訊,以及執行要求有訊息完整性、機密性與雙向驗證的高價值交易。

完整性、機密性與驗證

完整性、機密性及驗證這三項功能合稱為傳輸安全性。 傳輸安全性所提供的各種功能,會協助減少分散式應用程式的威脅。 下表簡要說明構成傳輸安全性的這三項功能。

函式 描述
完整性 「完整性」是指保證資料完整且正確,尤其是在資料從某個端點傳送到另一個端點,而且可能已有許多執行者讀取過之後。 完整性必須維持,才能避免資料竄改,而且通常是藉由訊息數位簽署達成這個目的。
保密 「機密性」是指保證訊息未被原本指定的讀者以外的人員讀取。 例如,信用卡號在透過網際網路傳送時必須保持其機密。 機密性通常是藉由使用公開金鑰/私密金鑰配置加密資料的方式提供。
驗證 「驗證」是指對宣告之身分識別的驗證。 例如,使用銀行帳戶時,必須只允許實際的帳戶擁有人提款。 驗證可藉由各種方法提供。 其中一種常見的方法是使用者帳號/密碼系統。 另一種方式則是使用由協力廠商提供的 X.509 憑證。

安全性模式

WCF 有數種傳輸安全性模式,下表將加以說明。

[模式] 描述
None 未在傳輸層或訊息層提供任何安全性。 除了 <basicHttpBinding> 元素,或 BasicHttpBinding 類別 (使用程式碼時) 之外,沒有任何預先定義的繫結會預設使用此模式。
傳輸 使用安全傳輸 (例如 HTTPS) 以獲得完整性、機密性和雙向驗證。
訊息 使用 SOAP 訊息安全性,以獲得完整性、機密性和雙向驗證。 SOAP 訊息是根據 WS-Security 標準加以保護。
混合模式 使用傳輸安全性,以獲得完整性、機密性和伺服器驗證。 使用訊息安全性 (WS-Security 和其他標準) 以獲得用戶端驗證。

(此模式的列舉型別為 TransportWithMessageCredential)
兩者 在兩個層級執行保護和驗證。 此模式僅適用於 <netMsmqBinding> 元素。

認證和傳輸安全性

「認證」是指代表用來建立所宣告之身分識別或功能的資料。 出示認證包括出示資料以及資料的所有權證明。 WCF 支援在傳輸及訊息安全性層級皆支援各式認證類型。 您可以針對 WCF 繫結指定認證類型。

在許多國家或地區,駕駛執照就是認證的一個範例。 執照包含代表一個人身分識別和能力的資料。 其中包含以持有人的照片做為所有權的證明。 執照是由受信任的授權單位發出,通常是政府的發照部門。 執照會經過密封,而且可能內含雷射防偽,表示沒有遭到竄改或偽造。

以 WCF 中支援的兩種認證類型為例:使用者名稱和 (X.509) 憑證認證。

對於使用者名稱認證,使用者名稱代表宣告的身分識別,而密碼代表所有權的證明。 在此案例中,受信任的授權單位是驗證使用者名稱和密碼的系統。

在憑證認證中,主體名稱、主體別名或憑證內的特定欄位可用來代表所宣告的身分識別和 (或) 能力。 認證中資料所有權的證明,是使用相關的私密金鑰產生簽章的方式建立。

如需程式設計傳輸安全性和指定認證的詳細資訊,請參閱繫結和安全性以及安全性行為

傳輸用戶端認證類型

下表說明建立使用傳輸安全性的應用程式時,可能使用的值。 您可以在程式碼或繫結設定中使用這些值。

設定 描述
None 指定用戶端不需要提出任何認證。 這會轉譯成匿名用戶端。
基本 指定基本驗證。 如需詳細資訊,請參閱 RFC2617,HTTP Authentication: Basic and Digest Authentication
Digest 指定摘要式驗證。 如需詳細資訊,請參閱 RFC2617,HTTP Authentication: Basic and Digest Authentication
Ntlm 指定在 Windows 網域上使用 SSPI 交涉的 Windows 驗證。

SSPI 交涉的結果會是使用 Kerberos 通訊協定或 NT LanMan (NTLM)。
Windows 指定在 Windows 網域上使用 SSPI 的 Windows 驗證。 SSPI 會挑選 Kerberos 通訊協定或 NTLM 做為驗證服務。

SSPI 會先嘗試 Kerberos 通訊協定,如果失敗的話,才會使用 NTLM。
憑證 使用憑證 (通常是 X.509) 執行用戶端驗證。

訊息用戶端認證類型

下表說明建立使用訊息安全性的應用程式時,可能使用的值。 您可以在程式碼或繫結設定中使用這些值。

設定 描述
None 允許服務與匿名用戶端互動。
Windows 允許在 Windows 認證的已驗證內容中發生 SOAP 訊息交換。 使用 SSPI 交涉機制挑選 Kerberos 通訊協定或 NTLM 做為驗證服務。
使用者名稱 允許服務要求用戶端必須使用使用者名稱認證進行驗證。 請注意,WCF 不允許任何透過使用者名稱進行的密碼編譯作業,例如產生簽章或加密資料。 如此一來,WCF 會在利用使用者名稱認證時強制保護傳輸。
憑證 允許服務要求用戶端使用憑證進行驗證。
CardSpace 允許服務要求用戶端使用 CardSpace 進行驗證。

程式設計認證

WCF 程式設計模型允許您使用服務行為和通道行為,針對每一種用戶端認證類型指定認證值和認證驗證程式。

WCF 安全性有兩種認證類型:服務認證行為和通道認證行為。 WCF 中的認證行為會指定實際資料,也就是用來滿足安全性需求的認證,而這些需求會透過繫結表達。 在 WCF 中,用戶端類別是在作業引動和訊息之間轉換的執行階段元件。 所有用戶端都是繼承自 ClientBase<TChannel> 類別。 基底類別上的 ClientCredentials 屬性可讓您指定各種用戶端認證的值。

在 WCF 中,服務行為是套用至類別的屬性,此類別會實作服務合約 (介面),以程式設計的方式控制服務。 ServiceCredentials 類別可讓您指定服務認證的憑證,以及各種用戶端認證類型的用戶端驗證設定。

訊息安全性的交涉模型

訊息安全性模式可讓您執行傳輸安全性,如此服務認證就會在用戶端超出範圍時設定。 例如,如果您使用儲存在 Windows 憑證存放區中的憑證,就必須使用 Microsoft Management Console (MMC) 嵌入式管理單元這類的工具。

訊息安全性模式還可讓您執行傳輸安全性,如此服務認證就會在初始交涉的過程中與用戶端交換。 若要啟用交涉,請將 NegotiateServiceCredential 屬性設為 true

另請參閱