用戶端驗證
服務經常會發行中繼資料,以便自動產生和設定用戶端 Proxy 型別。 當服務不受信任時,用戶端應用程式應該根據安全性、交易和服務合約類型等條件,驗證中繼資料是否符合用戶端應用程式的原則。 下列範例會示範如何撰寫用戶端端點行為,此行為會驗證服務端點以確定能夠安全地使用服務端點。
服務會公開 (Expose) 四個服務端點。 第一個端點使用 WSDualHttpBinding,第二個端點會使用 NTLM 驗證,第三個端點會啟用異動流程,而第四個端點會使用憑證架構的驗證。
用戶端會使用 MetadataResolver 類別來擷取服務的中繼資料。 用戶端會使用驗證行為,強制禁止雙工繫結、NTLM 驗證與交易流程的原則。 用戶端應用程式對於從服務中繼資料匯入的每一個 ServiceEndpoint 執行個體,都會在嘗試使用 Windows Communication Foundation (WCF) 用戶端連線至端點之前,將 InternetClientValidatorBehavior
端點行為的執行個體新增至 ServiceEndpoint。 此行為的 Validate
方法會在呼叫服務的任何作業之前執行,並且擲回 InvalidOperationExceptions
以強制執行該用戶端的原則。
若要建置範例
- 若要建置解決方案,請遵循建置 Windows Communication Foundation 範例中的指示進行。
若要在同一部電腦上執行範例
以系統管理員特殊權限開啟 Visual Studio 開發人員命令提示字元,然後執行範例安裝資料夾中的 Setup.bat。 這會安裝執行範例所需的所有憑證。
從 \service\bin\Debug 執行服務應用程式。
從 \client\bin\Debug 執行用戶端應用程式。 用戶端活動會顯示在用戶端主控台應用程式上。
若用戶端和服務無法通訊,請參閱 WCF 範例的疑難排解提示。
當您完成範例時,請執行 Cleanup.bat 以移除憑證。 其他安全性範例使用相同的憑證。
若要跨電腦執行範例
在伺服器之 Visual Studio 的開發人員命令提示字元中,以系統管理員特殊權鍵入
setup.bat service
。 使用service
引數執行setup.bat
會建立具有電腦完整網域名稱的服務憑證,並會將服務憑證匯出至名為 Service.cer 的檔案中。在伺服器上,編輯 App.config 以反映新的憑證名稱。 亦即,將 元素中的
findValue
屬性,變更為電腦完整網域名稱的 <serviceCertificate> 元素。從服務目錄中將 Service.cer 檔案複製至用戶端電腦上的用戶端目錄。
在用戶端上,以系統管理員特殊權限開啟 Visual Studio 的開發人員命令提示字元,然後鍵入
setup.bat client
。 使用setup.bat
引數執行client
,會建立名稱為 client.com 的用戶端憑證,並會將用戶端憑證匯出為名為 Client.cer 的檔案中。在 client.cs 檔中變更 MEX 端點的位址值和
findValue
,以便將預設伺服器憑證設定成符合您服務的新位址。 您可以藉由使用伺服器的完整網域名稱取代 localhost,完成這個動作。 接著重新建置。從用戶端目錄將 Client.cer 檔案複製到伺服器上的服務目錄中。
在用戶端上以系統管理員特殊權限開啟的 Visual Studio 開發人員命令提示字元中,執行 ImportServiceCert.bat。 這樣會將服務憑證從 Service.cer 檔案匯入至 CurrentUser - TrustedPeople 存放區中。
在伺服器上以系統管理員特殊權限開啟的 Visual Studio 開發人員命令提示字元中,執行 ImportClientCert.bat。 這樣便會從 Client.cer 檔將用戶端憑證匯入至 LocalMachine - TrustedPeople 存放區中。
在服務電腦上,使用 Visual Studio 來建置此服務專案並執行 service.exe。
在用戶端電腦上執行 client.exe。
- 若用戶端和服務無法通訊,請參閱 WCF 範例的疑難排解提示。
若要在使用範例之後進行清除
當您完成執行範例後,請執行範例資料夾中的 Cleanup.bat。
注意
跨電腦執行此範例時,這個指令碼不會移除用戶端上的服務憑證。 若您在多部電腦上執行了使用憑證的 WCF 範例,請務必清除安裝在 CurrentUser - TrustedPeople 存放區中的服務憑證。 若要這麼做,請使用下列命令:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
。