用戶端驗證
服務經常會發行中繼資料,以便自動產生和設定用戶端 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 執行用戶端應用程式。 用戶端活動會顯示在用戶端主控台應用程式上。
如果用戶端和服務無法通訊,請參閱Troubleshooting Tips。
當您完成範例時,請執行 Cleanup.bat 以移除憑證。 其他安全性範例使用相同的憑證。
若要跨電腦執行範例
在伺服器上,於使用系統管理員權限開啟的 Visual Studio 命令提示字元中,輸入 setup.bat service。 使用 service 引數執行 setup.bat
在伺服器上,編輯 App.config 以反映新的憑證名稱。 也就是說,將 <serviceCertificate> of <serviceCredentials> Element 項目中的 findValue 屬性變更為電腦的完整網域名稱。
從服務目錄中將 Service.cer 檔案複製至用戶端電腦上的用戶端目錄。
在用戶端上,使用系統管理員權限來開啟 Visual Studio 2010 命令提示字元,然後輸入 setup.bat client。 使用 client 引數執行 setup.bat
在 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。
- 如果用戶端和服務無法通訊,請參閱Troubleshooting Tips。
若要在使用範例之後進行清除
當您完成執行範例後,請執行範例資料夾中的 Cleanup.bat。
注意: 跨電腦執行此範例時,這個指令碼不會移除用戶端上的服務憑證。 如果您已執行跨電腦使用憑證的 WCF 範例,請確定清除安裝在 CurrentUser - TrustedPeople 存放區中的服務憑證。 若要這麼做,請使用下列命令:certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>。 例如:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com。