Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Usando o WCF (Windows Communication Foundation), o serviço pode especificar como um cliente é autenticado no serviço. Por exemplo, um serviço pode estipular que o cliente seja autenticado com um certificado.
Para determinar o tipo de credencial do cliente
Recupere os metadados do ponto de extremidade de metadados do serviço. Os metadados normalmente consistem em dois arquivos: o código do cliente na linguagem de programação de sua escolha (o padrão é Visual C#) e um arquivo de configuração XML. Uma maneira de recuperar metadados é usar a ferramenta Svcutil.exe para retornar o código do cliente e a configuração do cliente. Para obter mais informações, consulte Recuperando metadados e a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe).
Abra o arquivo de configuração XML. Se você usar a ferramenta Svcutil.exe, o nome padrão do arquivo será Output.config.
Localize o <elemento de segurança> com o
modeatributo (<modo de segurança =MessageOrTransport> ondeMessageOrTransportestá definido como um dos modos de segurança.Localize o elemento filho que corresponde ao valor do modo. Por exemplo, se o modo estiver definido como Mensagem, localize o elemento de <mensagem> contido no <elemento de segurança> .
Observe o valor atribuído ao
clientCredentialTypeatributo. O valor real depende de qual modo é usado, transporte ou mensagem.
O código XML a seguir mostra a configuração de um cliente usando a segurança da mensagem e exigindo um certificado para autenticar o cliente.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Exemplo: modo de transporte TCP com certificado como credencial de cliente
Este exemplo define o modo de segurança como modo de transporte e define o valor da credencial do cliente como um certificado X.509. Os procedimentos a seguir demonstram como definir o valor da credencial do cliente no cliente em código e configuração. Isso pressupõe que você tenha usado a ServiceModel Metadata Utility Tool (Svcutil.exe) para retornar os metadados (código e configuração) do serviço. Para obter mais informações, consulte Como criar um cliente.
Para especificar o valor da credencial do cliente no código do cliente
Use a Ferramenta de Metadados do ServiceModel (Svcutil.exe) para gerar código e configurações do serviço.
Crie uma instância do cliente WCF usando o código gerado.
Na classe cliente, defina a ClientCredentials propriedade da ClientBase<TChannel> classe como um valor apropriado. Este exemplo define a propriedade como um certificado X.509 usando o SetCertificate método da X509CertificateInitiatorClientCredential classe.
// 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 TryVocê pode usar qualquer uma das enumerações da X509FindType classe. O nome do sujeito é usado aqui no caso de o certificado for alterado (devido a uma data de validade). Usar o nome da entidade permite que a infraestrutura localize o certificado novamente.
Para especificar o valor da credencial do cliente na configuração
Adicione um
aoelemento .elemento Adicione um <elemento clientCredentials> ao <elemento behaviors> . Certifique-se de definir o atributo necessário
namepara um valor apropriado.Adicione um <elemento clientCertificate> ao <elemento clientCredentials> .
Defina os seguintes atributos como valores apropriados:
storeLocation, ,storeNamex509FindTypeefindValue, conforme mostrado no código a seguir. Para obter mais informações sobre certificados, consulte Como trabalhar com certificados.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>Ao configurar o cliente, especifique o comportamento definindo o
behaviorConfigurationatributo do<endpoint>elemento, conforme mostrado no código a seguir. O elemento de endpoint é um elemento filho do <elemento cliente>. Além disso, especifique o nome da configuração de associação definindo obindingConfigurationatributo para a associação para o cliente. Se você estiver usando um arquivo de configuração gerado, o nome da associação será gerado automaticamente. Neste exemplo, o nome é"tcpBindingWithCredential".<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Consulte também
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programação de Segurança em WCF
- Selecionando um tipo de credencial
- ServiceModel Metadata Utility Tool (Svcutil.exe)
- Trabalhando com certificados
- Como criar um cliente
- <netTcpBinding>
- <segurança>
- <Mensagem>
- <comportamento>
- <Comportamentos>
- <certificado do cliente>
- <clientCredentials>