模擬層級
如果模擬成功,表示用戶端已同意讓伺服器在某種程度上成為用戶端。 不同程度的模擬稱為 模擬層級,並指出模擬用戶端時,伺服器授與多少授權單位。
目前有四個模擬層級:匿名、識別、模擬和委派。 下列清單簡短說明每個模擬層級:
-
匿名 (RPC_C_IMP_LEVEL_ANONYMOUS)
-
用戶端對伺服器是匿名的。 伺服器進程可以模擬用戶端,但模擬令牌不包含用戶端的任何資訊。 只有本機進程間通訊傳輸才支援此層級。 所有其他傳輸都會以無訊息方式升級此層級來識別。
-
識別 (RPC_C_IMP_LEVEL_IDENTIFY)
-
系統預設層級。 伺服器可以取得用戶端的身分識別,而且伺服器可以模擬客戶端來執行 ACL 檢查。
-
模擬 (RPC_C_IMP_LEVEL_IMPERSONATE)
-
伺服器可以模擬用戶端的安全性內容,同時代表用戶端採取行動。 伺服器可以存取本機資源做為用戶端。 如果伺服器是本機伺服器,它可以以用戶端身分存取網路資源。 如果伺服器是遠端伺服器,它只能存取與伺服器位於相同電腦上的資源。
-
delegate (RPC_C_IMP_LEVEL_DELEGATE)
-
最強大的模擬層級。 選取此層級時,伺服器 (不論本機或遠端) 代表用戶端動作時可以模擬用戶端的安全性內容。 在模擬期間,客戶端的認證(本機和網路)都可以傳遞至任意數目的計算機。
若要讓模擬在委派層級運作,必須符合下列需求:
- 客戶端必須將模擬層級設定為 RPC_C_IMP_LEVEL_DELEGATE。
- 客戶端帳戶不得在 Active Directory 服務中標示為「帳戶敏感且無法委派」。
- 伺服器帳戶必須標示為 Active Directory 服務中的「委派信任」屬性。
- 裝載用戶端、伺服器和任何「下游」伺服器的計算機都必須在網域中執行。
藉由選擇模擬層級,用戶端會告訴伺服器模擬用戶端的可能程度。 用戶端會在用來與伺服器通訊的 Proxy 上設定模擬層級。
設定模擬層級
有兩種方式可以設定模擬層級:
- 用戶端可以透過呼叫 CoInitializeSecurity 來設定整個進程。
- 用戶端可以透過呼叫 IClientSecurity::SetBlanket,在遠端物件的介面上設定 Proxy 層級安全性(或協助程式函式 CoSetProxyBlanket)。
您可以透過 dwImpLevel 參數,將適當的RPC_C_IMP_LEVEL_xxx值傳遞至 CoInitializeSecurity 或 CoSetProxyBlanket 來設定模擬層級。
不同的驗證服務支援不同範圍的委派層級模擬。 例如,NTLMSSP 支援跨線程和跨進程委派層級模擬,但不支援跨計算機。 另一方面,Kerberos 通訊協定支援跨計算機界限的委派層級模擬,而 Schannel 不支援委派層級的任何模擬。 如果您在模擬層級有 Proxy,而且想要將模擬層級設定為委派,您應該使用模擬層級以外的每個參數的預設常數呼叫 SetBlanket。 COM 會在本機選擇NTLM,並從遠端選擇 Kerberos 通訊協定(Kerberos 通訊協定將正常運作時)。
相關主題