作法:在服務上模擬用戶端
在 Windows Communication Foundation (WCF) 服務上模擬用戶端可讓服務代表用戶端執行動作。 關於存取控制清單 (ACL) 檢查的動作,例如存取機器上的目錄和檔案或存取 SQL Server 資料庫,請根據用戶端使用者帳戶檢查 ACL。 本主題說明在 Windows 網域中啟用用戶端以設定用戶端模擬等級所需的基本步驟。 如需此文件的實用範例,請參閱 Impersonating the Client。 如需有關用戶端模擬的詳細資訊,請參閱委派和模擬。
注意
用戶端和服務在相同電腦上執行,且用戶端在系統帳戶下執行時 (也就是 Local System
或 Network Service
),以可設定狀態的安全性內容權杖建立安全的工作階段時無法模擬用戶端。 WinForms 或主控台應用程式通常在目前登入的帳戶下執行,因此根據預設值可以模擬該帳戶。 但當用戶端是 ASP.NET 頁面,而且該頁面是裝載於 IIS 6.0 或 IIS 7.0中時,根據預設,用戶端不會以 Network Service
帳戶執行。 所有支援安全工作階段的系統提供繫結預設為使用沒有狀態的安全性內容權杖。 不過,如果用戶端是 ASP.NET 頁面,而且已使用含有可設定狀態之安全性內容權杖的安全工作階段,就無法模擬該用戶端。 如需詳細了解如何在安全工作階段使用具狀態的資訊安全內容權杖,請參閱作法:為安全工作階段建立資訊安全內容權杖。
若要從服務上的快取 Windows 權杖啟用用戶端模擬
建立服務。 如需此基本程序的教學課程,請參閱 Getting Started Tutorial。
使用運用 Windows 驗證並建立工作階段的繫結,例如 NetTcpBinding 或 WSHttpBinding。
建立服務的介面實作時,將 OperationBehaviorAttribute 類別套用至需要用戶端模擬的方法。 將 Impersonation 屬性設為 Required。
[OperationBehavior(Impersonation=ImpersonationOption.Required)] public double Add(double a, double b) { return a + b; }
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _ Public Function Add(ByVal a As Double, ByVal b As Double) As Double _ Implements ICalculator.Add Return a + b End Function
若要設定用戶端上的允許模擬等級
使用 ServiceModel Metadata Utility Tool (Svcutil.exe)建立服務用戶端程式碼。 如需詳細資訊,請參閱使用 WCF 用戶端存取服務。
建立 WCF 用戶端後,將 WindowsClientCredential 類別的 AllowedImpersonationLevel 屬性設定成為其中一個 TokenImpersonationLevel 列舉值。
注意
若要使用 Delegation,必須使用交涉的 Kerberos 驗證 (有時稱為 multi-leg 或 multi-step Kerberos)。 如需如何實作這項操作的說明,請參閱安全性的最佳做法。
CalculatorClient client = new CalculatorClient("CalculatorEndpoint"); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Dim client As New CalculatorClient("CalculatorEndpoint") client.ClientCredentials.Windows.AllowedImpersonationLevel = _ System.Security.Principal.TokenImpersonationLevel.Impersonation