安全性毛毯交涉

安全性毛毯是一組值,描述套用至進程中所有 Proxy 或只套用至特定介面 Proxy 的安全性設定。 安全性毛毯包含下列值:

  • 驗證服務
  • 授權服務
  • 主體名稱
  • 驗證層級
  • 模擬等級
  • 驗證身分識別
  • 功能
  • 存取控制清單 (ACL) (只限伺服器 )

安全性總和交涉是 COM 在建立 Proxy 時用來選擇 Proxy 安全性設定的程式。 此程式牽涉到比較伺服器的安全性毛毯與用戶端的安全性毛毯,以及使用這些值來為 Proxy 建立適當的預設安全性毛毯。 下列段落說明客戶端和伺服器的安全性毛毯的來源,並描述 COM 如何使用用戶端和伺服器的安全性毛毯來交涉 Proxy 的安全性毛毯。

用戶端和伺服器可以分別呼叫 CoInitializeSecurity ,以指定其各自的安全性毛毯。 如果應用程式未明確呼叫 CoInitializeSecurity,COM 會使用適當的預設值隱含呼叫應用程式。 如需這些預設值的詳細資訊,請參閱 COM 安全性預設值

當應用程式是伺服器時,CoInitializeSecurity 的某些參數會套用,有些則適用於應用程式是用戶端。 當應用程式作為伺服器時,這些參數是相關的:ACL、驗證服務/授權服務/主體名稱 Tuple 的清單,以及驗證層級。 伺服器對 CoInitializeSecurity 的呼叫,無論是隱含還是明確,都會決定伺服器的安全性毛毯,這仍會保持固定。

當應用程式做為用戶端時,傳遞至 CoInitializeSecurity 的下列值是相關的:驗證層級、模擬層級、驗證身分識別和功能。 用戶端對 CoInitializeSecurity 的隱含或明確呼叫表示用戶端想要的安全性毛毯。

建立 Proxy 時,COM 會使用伺服器的安全性毛毯和用戶端的安全性毛毯所指定的值,來交涉適用於 Proxy 的預設安全性毛毯。 COM 會挑選可在用戶端和伺服器上運作的驗證服務。 系統會選擇授權服務和主體名稱來處理驗證服務。 針對驗證層級,COM 會選擇客戶端和伺服器所指定之驗證層級的較高層級。 模擬層級和 COM 選擇的功能是由用戶端所指定的。 驗證身分識別是由客戶端針對所選驗證服務所指定的身分識別。

計算預設安全性毛毯之後,其值會指派給新建立的 Proxy。 用戶端可以呼叫 IClientSecurity::SetBlanket 來覆寫 Proxy 的安全性設定。 不會交涉指定給 SetBlanket 的值;它們只會指派給指定的 Proxy。 不過,如果預設參數 (例如 RPC_C_IMP_LEVEL_DEFAULT) 傳遞至 SetBlanket,COM 會使用先前描述的安全性總和交涉演算法來計算預設參數。

COM 中的安全性