以 IPC 通道進行驗證
本主題專門說明一項為了在現有應用程式中提供回溯相容性而保留的舊有技術,不建議用於新的開發工作。分散式應用程式應使用 Windows Communication Foundation (WCF) 進行開發。
IPC 通道直接支援驗證與模擬。這個主題說明如何設定用戶端與伺服器通道。
.NET Framework 可讓遠端物件的伺服器藉由設定與 IpcServerChannel 和 IpcClientChannel 物件關聯的屬性來驗證與模擬呼叫端。與 HTTP 和 TCP 通道不同的是,IPC 通道預設會執行驗證。建立好 IpcServerChannel 之後,會隨即為通道建立存取控制清單 (ACL)。根據預設,ACL 只包含用來執行伺服器應用程式的認證。若要與通道進行通訊,用戶端 (理所當然為 IpcClientChannel) 必須使用相同的認證來執行。然而,您可以在 IPC 伺服器通道組態中指定 Windows 使用者或 User 群組,以允許該使用者或使用者群組存取通道。
伺服器組態
如果您希望讓執行伺服器應用程式所需識別之所屬使用者以外的使用者存取 IPC 通道,可以在 authorizedGroup 屬性中指定使用者或使用者群組。下列組態檔可允許 Users
群組中的所有使用者存取 IPC 通道。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall" type="Server.MyRemoteObject, Server" objectUri="MyRemoteObject.rem" />
</service>
<channels>
<channel ref="ipc" portName="MyIpcChannel" authorizedGroup="Users"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
IPC 通道同時支援模擬。這是由伺服器上的 impersonate 屬性所控制。下列組態會開啟模擬。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="SingleCall" type="Microsoft.Samples.Implementation.ImplementationClass, Server" objectUri="server.rem" />
</service>
<channels>
<channel ref="ipc" portName="MyIpcChannel" secure="true" impersonate="true" authorizedGroup="Users"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
注意: |
---|
使用 IPC 通道驗證時,您仍舊需要將 secure 屬性設為 true (在將 impersonate 屬性設為 true 時)。 |
注意: |
---|
所有處理序都會在 Windows Vista 的標準使用者帳戶底下執行。標準使用者無法模擬管理員帳戶。如果您的遠端處理應用程式必須模擬管理員帳戶,該應用程式必須在更高的權限下執行。 |
經過驗證之用戶端的識別可以藉由取得 CurrentPrincipal 並接著存取其 Identity 屬性來加以存取。經過模擬之用戶端的識別可以由 GetCurrent 來存取。必要時,您可以接著執行自己的驗證作業。
IPC 通道一律使用 NTLM 驗證。由於 IPC 僅限於單一電腦上的呼叫,因此不支援 Kerberos。
用戶端組態
若要設定用戶端 IPC 通道使用模擬,請將 tokenImpersonationLevel 屬性設為 impersonation
,如下列組態檔所示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="ipc" secure="true" tokenImpersonationLevel="impersonation" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
注意: |
---|
使用 IPC 通道驗證時,您仍舊需要將 secure 屬性設為 true (在將 tokenImpersonationLevel 屬性設為 "impersonation" 時)。若要進行模擬,伺服器通道上的 impersonate 屬性必須設為 true。請注意,伺服器上的屬性稱為 impersonate,但是在用戶端上,您要將 tokenImpersonationLevel 設為 impersonation。 |
注意: |
---|
所有處理序都會在 Windows Vista 的標準使用者帳戶底下執行。標準使用者無法模擬管理員帳戶。如果您的遠端處理應用程式必須模擬管理員帳戶,該應用程式必須在更高的權限下執行。 |
tokenImpersonationLevel 可以設為下表中的其中一個值。
tokenImpersonationLevel 設定 | 說明 |
---|---|
識別 |
伺服器可以取得關於用戶端的資訊,例如安全識別項 (Security Identifier) 和權限,但無法模擬用戶端。 |
模擬 |
伺服器可在其本機系統上模擬用戶端的安全性內容。伺服器無法在遠端系統上模擬用戶端。 |
委派 |
伺服器可以在遠端系統上模擬用戶端。 |
注意: |
---|
IPC 通道不允許您以程式設計方式或是透過組態來指定另一組認證。因此,用戶端一律將執行時所使用的認證傳送給伺服器。 |
注意: |
---|
IPC 通道僅使用 NTLM 來驗證。 |