Nasıl yapılır: İstemci Kimlik Bilgileri Değerlerini Belirtme
Hizmet, Windows Communication Foundation 'ı (WCF) kullanarak bir istemcinin hizmette kimlik doğrulamasının nasıl yapılacağını belirtebilir. Örneğin, bir hizmet istemcinin bir sertifikayla kimliğinin doğrulandığını belirtebilir.
İstemci kimlik bilgisi türünü belirlemek için
Hizmetin meta veri uç noktasından meta verileri alın. Meta veriler genellikle iki dosyadan oluşur: seçtiğiniz programlama dilindeki istemci kodu (varsayılan değer Visual C#'dir) ve bir XML yapılandırma dosyası. Meta verileri almanın bir yolu, istemci kodunu ve istemci yapılandırmasını döndürmek için Svcutil.exe aracını kullanmaktır. Daha fazla bilgi için bkz . Meta Verileri Alma ve ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe).
XML yapılandırma dosyasını açın. Svcutil.exe aracını kullanırsanız, dosyanın varsayılan adı Output.config'dir.
mode özniteliğine (<güvenlik modu =>
MessageOrTransport
buradaMessageOrTransport
güvenlik> modlarından birine ayarlanmış) güvenlik öğesini bulun.<Mod değeriyle eşleşen alt öğeyi bulun. Örneğin, mod İleti olarak ayarlandıysa, güvenlik> öğesinde <bulunan ileti> öğesini bulun.<
clientCredentialType özniteliğine atanan değeri not edin. Gerçek değer, hangi modun kullanıldığına, aktarıma veya iletiye bağlıdır.
Aşağıdaki XML kodu, ileti güvenliğini kullanan ve istemcinin kimliğini doğrulamak için sertifika gerektiren bir istemcinin yapılandırmasını gösterir.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Örnek: İstemci Kimlik Bilgisi Olarak Sertifika ile TCP Aktarım Modu
Bu örnek, güvenlik modunu Aktarım moduna ayarlar ve istemci kimlik bilgisi değerini bir X.509 sertifikasına ayarlar. Aşağıdaki yordamlarda, kod ve yapılandırmada istemcide istemci kimlik bilgisi değerinin nasıl ayarlanacağı gösterilmektedir. Bu, hizmetten meta verileri (kod ve yapılandırma) döndürmek için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullandığınız varsayılır. Daha fazla bilgi için bkz . Nasıl yapılır: İstemci Oluşturma.
Kodda istemcide istemci kimlik bilgisi değerini belirtmek için
Oluşturulan kodu kullanarak WCF istemcisinin bir örneğini oluşturun.
İstemci sınıfında, sınıfının özelliğini ClientBase<TChannel> uygun bir değere ayarlayınClientCredentials. Bu örnek, sınıfının yöntemini kullanarak SetCertificate özelliğini bir X.509 sertifikasına X509CertificateInitiatorClientCredential ayarlar.
// 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(); }
' 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
sınıfının numaralandırmalarından herhangi birini X509FindType kullanabilirsiniz. Sertifikanın değiştirilmesi durumunda (son kullanma tarihi nedeniyle) konu adı burada kullanılır. Konu adını kullanmak altyapının sertifikayı yeniden bulmasına olanak tanır.
Yapılandırmada istemcide istemci kimlik bilgisi değerini belirtmek için
behaviors öğesine clientCredentials <> öğesi< ekleyin.> Gerekli
name
özniteliği uygun bir değere ayarladığınızdan emin olun.clientCredentials> öğesine <bir< clientCertificate> öğesi ekleyin.
Aşağıdaki öznitelikleri, aşağıdaki kodda gösterildiği gibi uygun değerlere ayarlayın:
storeLocation
,storeName
x509FindType
, vefindValue
. Sertifikalar hakkında daha fazla bilgi için bkz . Sertifikalarla Çalışma.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
İstemciyi yapılandırırken, aşağıdaki kodda gösterildiği gibi öğesinin
<endpoint>
özniteliğini ayarlayarakbehaviorConfiguration
davranışı belirtin. Endpoint öğesi, istemci> öğesinin <alt öğesidir. Ayrıca, özniteliğini istemcinin bağlamasına ayarlayarakbindingConfiguration
bağlama yapılandırmasının adını belirtin. Oluşturulan bir yapılandırma dosyası kullanıyorsanız, bağlamanın adı otomatik olarak oluşturulur. Bu örnekte adı şeklindedir"tcpBindingWithCredential"
.<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Ayrıca bkz.
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- WCF Güvenliğini Programlama
- Kimlik Bilgisi Türü Seçme
- ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe)
- Sertifikalarla Çalışma
- Nasıl yapılır: İstemci Oluşturma
- <netTcpBinding>
- <Güvenlik >
- <ileti>
- <Davranış>
- <Davranış>
- <clientCertificate>
- <Clientcredentials>