Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Usando o Windows Communication Foundation (WCF), o serviço pode especificar como um cliente é autenticado ao 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
Recuperar os metadados a partir do endpoint de metadados do serviço. Os metadados consistem tipicamente em dois ficheiros: o código cliente na linguagem de programação da sua escolha (o padrão é Visual C#) e um ficheiro de configuração XML. Uma forma de recuperar metadados é usar a ferramenta Svcutil.exe para devolver o código do cliente e a configuração do cliente. Para mais informações, consulte Recuperação de Metadados e Ferramenta Utilitária de Metadados de Modelos de Serviço (Svcutil.exe).
Abra o ficheiro de configuração XML. Se usares a ferramenta Svcutil.exe, o nome padrão do ficheiro é Output.config.
Encontre o <elemento de segurança> com o
modeatributo (<modo de segurança =MessageOrTransport> ondeMessageOrTransportestá definido para um dos modos de segurança).Encontre o elemento filho que corresponda ao valor do modo. Por exemplo, se o modo estiver definido para Mensagem, encontre o <elemento mensagem> contido no <elemento de segurança> .
Note o valor atribuído ao
clientCredentialTypeatributo. O valor real depende do modo utilizado, transporte ou mensagem.
O seguinte código XML mostra a configuração de um cliente que utiliza a segurança de mensagens e requer 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 do Cliente
Este exemplo define o modo de segurança para modo Transporte e define o valor da credencial do cliente para um certificado X.509. Os procedimentos seguintes demonstram como definir o valor da credencial do cliente no cliente em código e configuração. Isto pressupõe que utilizou a Ferramenta Utilitária de Metadados do Modelo de Serviço (Svcutil.exe) para devolver os metadados (código e configuração) do serviço. Para mais informações, veja Como: Criar um Cliente.
Para especificar o valor da credencial do cliente no cliente em código
Use a Ferramenta de Utilidade de Metadados do Modelo de Serviço (Svcutil.exe) para gerar código e configuração a partir 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 a um valor apropriado. Este exemplo define a propriedade para 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 TryPodes usar qualquer uma das enumerações da X509FindType classe. O nome do sujeito é usado aqui caso o certificado seja alterado (devido ao prazo de validade). Usar o nome do assunto permite que a infraestrutura volte a encontrar o certificado.
Para especificar o valor de credencial do cliente no cliente em configuração
Adiciona um <elemento de comportamento> ao <elemento de comportamentos> .
Adicione um <elemento credenciaisCliente> ao <comportamento>. Certifique-se de definir o atributo necessário
namepara um valor apropriado.Adicione um <elemento clientCertificate> ao <elemento clientCredentials>.
Defina os seguintes atributos para valores apropriados:
storeLocation,storeName,x509FindType, efindValue, conforme mostrado no código seguinte. Para mais informações sobre certificados, consulte 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 seguinte. O elemento endpoint é um filho do <elemento cliente> . Além disso, especifique o nome da configuração de binding definindo o atributobindingConfigurationdo binding para o cliente. Se estiver a usar um ficheiro de configuração gerado, o nome da ligação é 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 WCF Security
- Seleção de um Tipo de Credencial
- Ferramenta Utilitária de Metadados ServiceModel (Svcutil.exe)
- Trabalhando com certificados
- Como: Criar um Cliente
- <netTcpBinding>
- <Segurança>
- <Mensagem>
- <comportamento>
- <Comportamentos>
- <Certificado do cliente>
- <clientCredenciais>