Compartilhar via


Validação de 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 gravar um comportamento de terminal de cliente que valida o terminal de serviço para garantir que o terminal de serviço seja seguro para uso.

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 extremidadet habilita o fluxo de transações e o quarto ponto de extremidade usa autenticação baseada em certificado.

O cliente usa a classe MetadataResolver para recuperar os metadados do 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 instância ServiceEndpoint importada dos metadados do serviço, o aplicativo cliente adiciona uma instância do comportamento de ponto de extremidade InternetClientValidatorBehavior ao ServiceEndpoint antes de tentar usar um cliente Windows Communication Foundation (WCF) para se conectar ao ponto de extremidade. O método Validate do comportamento é executado antes de qualquer operação no serviço ser chamada e impõe a política do cliente lançando InvalidOperationExceptions.

Para criar o exemplo

  1. Para compilar a solução, siga as instruções contidas em Compilar as amostras do Windows Communication Foundation.

Para executar a amostra no mesmo computador

  1. Abra um Prompt de Comando do Desenvolvedor para Visual Studio com privilégios de administrador e execute Setup.bat na pasta de instalação da amostra. Isso instalará todos os certificados necessários para executar o exemplo.

  2. Execute o aplicativo de serviço em \service\bin\Debug.

  3. Execute o aplicativo cliente de \client\bin\Debug. A atividade do cliente é exibida no aplicativo do console do cliente.

  4. Se o cliente e o serviço não puderem se comunicar, confira Dicas de solução de problemas para exemplos de WCF.

  5. Remova os certificados executando Cleanup.bat quando tiver terminado de usar a amostra. Outros exemplos de segurança usam os mesmos certificados.

Para executar o exemplo em vários computadores

  1. No servidor, em um Prompt de Comando do Desenvolvedor para Visual Studio executado com privilégios de administrador, digite setup.bat service. A execução de setup.bat com o argumento service 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.

  2. No servidor, edite App.config para refletir o novo nome do certificado. Ou seja, altere o atributo findValue no elemento <serviceCertificate> para o nome de domínio totalmente qualificado do computador.

  3. Copie o arquivo Service.cer do diretório de serviço para o diretório do cliente no computador cliente.

  4. No cliente, abra um Prompt de Comando do Desenvolvedor para Visual Studio com privilégios de administrador e digite setup.bat client. A execução de setup.bat com o argumento client cria um certificado de cliente chamado Client.com e exporta o certificado do cliente para um arquivo chamado Client.cer.

  5. No arquivo client.cs, altere o valor do endereço do terminal MEX e o findValue para definir o certificado do servidor padrão para corresponder ao novo endereço do seu serviço. Você faz isso substituindo localhost pelo nome de domínio totalmente qualificado do servidor. Recriar.

  6. Copie o arquivo Client.cer do diretório do cliente para o diretório de serviço no servidor.

  7. No cliente, execute ImportServiceCert.bat em um Prompt de Comando do Desenvolvedor para Visual Studio aberto com privilégios de administrador. Isso importará o certificado de serviço do arquivo Service.cer para o repositório CurrentUser - TrustedPeople.

  8. No servidor, execute ImportClientCert.bat em um Prompt de Comando do Desenvolvedor para Visual Studio aberto com privilégios de administrador. Isso importará o certificado do cliente do arquivo Client.cer para o repositório LocalMachine – TrustedPeople.

  9. No computador de serviço, compile o projeto de serviço no Visual Studio e execute service.exe.

  10. No computador cliente, execute client.exe.

    1. Se o cliente e o serviço não puderem se comunicar, confira Dicas de solução de problemas para exemplos de WCF.

Para fazer uma limpeza após o exemplo

  • Execute Cleanup.bat na pasta de amostras depois de concluir a execução da amostra.

    Observação

    Esse script não remove os certificados de serviço em um cliente na execução dessa amostra em vários computadores. Se você executou exemplos do WCF que usam certificados em computadores, certifique-se de limpar os certificados de serviço que foram instalados no repositório 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.

Confira também