Validação do Cliente
Os serviços frequentemente publicam metadados para permitir a geração e configuração automáticas de tipos de proxy de cliente. Quando o serviço não é confiável, os aplicativos cliente devem validar se os metadados estão em conformidade com a política do aplicativo cliente em relação à segurança, transações, tipo de contrato de serviço e assim por diante. O exemplo a seguir demonstra como escrever um comportamento de ponto de extremidade de cliente que valida o ponto de extremidade de serviço para garantir que o ponto de extremidade de serviço seja seguro de usar.
O serviço expõe quatro pontos de extremidade de serviço. O primeiro ponto de extremidade usa o WSDualHttpBinding, o segundo ponto de extremidade usa autenticação NTLM, o terceiro ponto de extremidade permite o fluxo de transações e o quarto ponto de extremidade usa autenticação baseada em certificado.
O cliente usa a MetadataResolver classe para recuperar os metadados para o serviço. O cliente impõe uma política de proibição de ligações duplex, autenticação NTLM e fluxo de transações usando um comportamento de validação. Para cada ServiceEndpoint instância importada dos metadados do serviço, o aplicativo cliente adiciona uma instância do InternetClientValidatorBehavior
comportamento do ponto de extremidade ao ServiceEndpoint cliente antes de tentar usar um cliente WCF (Windows Communication Foundation) para se conectar ao ponto de extremidade. O método do comportamento é executado antes de Validate
qualquer operação no serviço ser chamada e impõe a política do cliente lançando InvalidOperationExceptions
.
Para criar o exemplo
- Para criar a solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo no mesmo computador
Abra um prompt de comando do desenvolvedor para Visual Studio com privilégios de administrador e execute Setup.bat da pasta de instalação de exemplo. Isso instala todos os certificados necessários para executar o exemplo.
Execute o aplicativo de serviço de \service\bin\Debug.
Execute o aplicativo cliente de \client\bin\Debug. A atividade do cliente é exibida no aplicativo de console do cliente.
Se o cliente e o serviço não puderem se comunicar, consulte Dicas de solução de problemas para exemplos de WCF.
Remova os certificados executando Cleanup.bat quando tiver terminado com o exemplo. Outros exemplos de segurança usam os mesmos certificados.
Para executar o exemplo em computadores
No servidor, em um prompt de comando do desenvolvedor para Visual Studio executado com privilégios de administrador, digite
setup.bat service
. A execuçãosetup.bat
com oservice
argumento cria um certificado de serviço com o nome de domínio totalmente qualificado do computador e exporta o certificado de serviço para um arquivo chamado Service.cer.No servidor, edite App.config para refletir o nome do novo certificado. Ou seja, altere o
findValue
<atributo no elemento serviceCertificate> para o nome de domínio totalmente qualificado do computador.Copie o arquivo Service.cer do diretório de serviço para o diretório do cliente no computador cliente.
No cliente, abra um prompt de comando do desenvolvedor para Visual Studio com privilégios de administrador e digite
setup.bat client
. A execuçãosetup.bat
com oclient
argumento cria um certificado de cliente chamado Client.com e exporta o certificado de cliente para um arquivo chamado Client.cer.No arquivo client.cs altere o valor de endereço do ponto de extremidade MEX e o
findValue
para definir o certificado de servidor padrão para corresponder ao novo endereço do seu serviço. Para fazer isso, substitua localhost pelo nome de domínio totalmente qualificado do servidor. Recriar.Copie o arquivo Client.cer do diretório do cliente para o diretório de serviço no servidor.
No cliente, execute ImportServiceCert.bat em um prompt de comando do desenvolvedor para Visual Studio aberto com privilégios de administrador. Isso importa o certificado de serviço do arquivo Service.cer para o repositório CurrentUser - TrustedPeople.
No servidor, execute ImportClientCert.bat em um prompt de comando do desenvolvedor para Visual Studio aberto com privilégios de administrador. Isso importa o certificado do cliente do arquivo Client.cer para o armazenamento LocalMachine - TrustedPeople.
No computador de serviço, crie o projeto de serviço no Visual Studio e execute service.exe.
No computador cliente, execute client.exe.
- Se o cliente e o serviço não puderem se comunicar, consulte Dicas de solução de problemas para exemplos de WCF.
Para limpar após a amostra
Execute Cleanup.bat na pasta de exemplos assim que terminar de executar o exemplo.
Nota
Esse script não remove certificados de serviço em um cliente ao executar este exemplo em computadores. Se você tiver executado exemplos de WCF que usam certificados entre computadores, certifique-se de limpar os certificados de serviço que foram instalados no armazenamento CurrentUser - TrustedPeople. Para fazer isso, use o seguinte comando:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.