HOW TO:指定用戶端認證值
使用 Windows Communication Foundation (WCF) 可以讓服務指定用戶端向服務驗證自身的方式。 例如,服務可以規定用戶端必須出示憑證交付驗證。
判斷用戶端認證類型
從服務的中繼資料端點擷取中繼資料。 中繼資料通常包含兩個檔案:以您所選程式語言 (預設為 Visual C#) 撰寫的用戶端程式碼,還有 XML 組態檔。 擷取中繼資料的方法之一,是使用 Svcutil.exe 工具傳回用戶端程式碼和用戶端組態。 如需詳細資訊,請參閱擷取中繼資料和 ServiceModel 中繼資料公用程式工具 (Svcutil.exe)。
開啟 XML 組態檔。 如果您是使用 Svcutil.exe 工具,檔案的預設名稱即為 Output.config。
請找出具有 mode 屬性的 <security> 項目 (<security mode = MessageOrTransport>,其中的 MessageOrTransport 會設定為某一種安全性模式。
找出符合模式值的子項目。 例如,假定模式設為 [訊息],則尋找包含於 <security> 項目中的 <message> 項目。
記下已指派給 clientCredentialType 屬性的值。 實際值取決於使用的模式是傳輸還是訊息。
下列 XML 程式碼所示為使用訊息安全性,且用戶端驗證時需要憑證的用戶端組態。
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
範例:TCP 傳輸模式結合用戶端認證的憑證
這個範例會將安全性模式設為傳輸模式,並將用戶端認證值設為 X.509 憑證。 下列程序示範如何透過程式碼與組態,設定用戶端的用戶端認證值。 這項程序假定您已經使用 ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 從服務傳回中繼資料 (程式碼與組態)。 如需詳細資訊,請參閱 HOW TO:建立 Windows Communication Foundation 用戶端.
透過程式碼指定用戶端的用戶端認證值
使用 ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 從服務中產生程式碼與組態。
使用產生的程式碼來建立 WCF 用戶端的執行個體。
在用戶端類別上,將 ClientBase 類別的 ClientCredentials 屬性設定為適當值。 這個範例會使用 X509CertificateInitiatorClientCredential 類別的 SetCertificate 方法,將屬性設定為 X.509 憑證。
' Create a binding using Transport and a certificate. Dim b As New NetTcpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate ' Create an EndPointAddress. Dim ea As New EndpointAddress("net.tcp://localHost:8036/Calculator/MyCalculator") ' Create the client. Dim cc As New CalculatorClient(b, ea) ' Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( _ StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com") Try cc.Open() ' Begin using the client. Console.WriteLine(cc.Divide(1001, 2)) cc.Close() Catch adExc As AddressAccessDeniedException Console.WriteLine(adExc.Message) Console.ReadLine() Catch exc As System.Exception Console.WriteLine(exc.Message) Console.ReadLine() End Try
// Create a binding using Transport and a certificate. NetTcpBinding b = new NetTcpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; // Create an EndPointAddress. EndpointAddress ea = new EndpointAddress( "net.tcp://localHost:8036/Calculator/MyCalculator"); // Create the client. CalculatorClient cc = new CalculatorClient(b, ea); // Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com"); try { cc.Open(); // Begin using the client. Console.WriteLine(cc.Divide(1001, 2)); cc.Close(); } catch (AddressAccessDeniedException adExc) { Console.WriteLine(adExc.Message); Console.ReadLine(); } catch (System.Exception exc) { Console.WriteLine(exc.Message); Console.ReadLine(); }
您可以使用 X509FindType 類別的任何一種列舉。 此處將使用主旨名稱,以避免憑證因為到期日關係而變更。 使用主旨名稱可讓基礎結構重新找到憑證。
若要透過組態指定用戶端的用戶端認證值
將 <behavior> of <endpointBehaviors><behaviors> 項目加入至 項目。
將 <clientCredentials><behaviors> 項目加入至 項目。 請務必將必要的
name
屬性設定為適當值。將 <clientCertificate> of <serviceCredentials><clientCredentials> 項目加入至 項目。
如下列程式碼所示,將下列屬性設定為
storeLocation
、storeName
、x509FindType
和findValue
的適當值。如需詳細資訊 憑證的詳細資訊,請參閱使用憑證。<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
設定用戶端時,設定
<endpoint>
項目的behaviorConfiguration
屬性來指定行為,如下列程式碼所示。 端點項目是 <client> 項目的子系。 同時,將bindingConfiguration
屬性設定為用戶端的繫結,以指定繫結組態的名稱。 如果您使用的是產生的組態檔,繫結名稱就會自動產生。 在這個範例中,名稱為"tcpBindingWithCredential"
。<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
另請參閱
工作
HOW TO:建立 Windows Communication Foundation 用戶端
參考
NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential
概念
WCF 安全性程式設計
選取認證類型
ServiceModel 中繼資料公用程式工具 (Svcutil.exe)
使用憑證
其他資源
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>