使用 TCP 通道進行驗證
通常可使遠端程序識別呼叫端,然後使用與該識別相關的權限執行。因為這個作法可協助防止惡意呼叫端濫用遠端程序來執行未授權的動作,所以建議您使用這個作法。
.NET Framework 允許遠端物件的伺服器透過設定相關 TcpServerChannel 和 TcpClientChannel 物件的組態屬性,識別和模擬呼叫端。
伺服器組態
若要設定伺服器 TCP 通道以驗證遠端呼叫端,請使用 TcpServerChannel 物件的 authenticationMode 組態屬性,這個屬性可設定為 AuthenticationMode 列舉型別的任何成員。如果 authenticationMode 是設定為 IdentifyCallers,則通道需要所有呼叫端提供可驗證的使用者識別。如果 authenticationMode 是設定為 ImpersonateCallers,則會使用所提供的識別執行伺服器上的所有作業。如需如何以程式設計方式設定 authenticationMode 組態屬性的範例,請參閱 如何設定 authenticationMode 組態屬性。
已驗證用戶端的識別可從 CallContext 類別以 __remotePrincipal 資料的形式取得。
用戶端組態
若要設定用戶端 TCP 通道以識別遠端伺服器的呼叫端,請使用 TcpClientChannel 物件的 impersonationLevel 組態屬性,這個屬性可設定為 ClientImpersonationLevel 列舉型別的任何成員。如果 impersonationLevel 是設定為 None,則會匿名進行對遠端伺服器的所有呼叫。如果 impersonationLevel 是設定為 Identify,則用戶端會識別遠端伺服器的呼叫端。如果 impersonationLevel 是設定為 Impersonate,則用戶端允許以所提供的識別執行遠端呼叫。如果 impersonationLevel 是設定為 Delegate,則伺服器可能會接著傳遞用戶端識別。如果遠端伺服器需要的 impersonationLevel 比用戶端允許的還高 (例如,authenticationMode 是設定為 IdentifyCallers,而 impersonationLevel 是設定為 None,或 authenticationMode 是設定為 ImpersonateCallers,而 impersonationLevel 是設定為 Identify),則會擲回例外狀況。
TCP 用戶端通道預設會以用來執行用戶端處理序的使用者識別,驗證它自已。將 useDefaultCredentials 組態屬性設定為 false 並設定 domain、username 和 password 組態屬性,即可指定替代識別。
您可設定 TCP 用戶端通道,以決定是否依據複雜的程式設計邏輯進行驗證。如果將 authenticationPolicy 組態屬性設定為實作 IAuthenticationPolicy 介面的物件,則會呼叫物件的 ValidateSecurityPackage 方法,以判斷是否繼續進行驗證。
如需說明如何在組態檔中設定 TCP 用戶端通道以執行驗證的範例,請參閱 如何設定 TCP 用戶端通道以執行驗證。
請參閱
工作
如何設定 authenticationMode 組態屬性
如何設定 TCP 用戶端通道以執行驗證
參考
AuthenticationMode
ClientImpersonationLevel