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
- 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
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.
Execute o aplicativo de serviço em \service\bin\Debug.
Execute o aplicativo cliente de \client\bin\Debug. A atividade do cliente é exibida no aplicativo do console do cliente.
Se o cliente e o serviço não puderem se comunicar, confira Dicas de solução de problemas para exemplos de WCF.
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
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 desetup.bat
com o argumentoservice
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 novo nome do certificado. Ou seja, altere o atributo
findValue
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ção desetup.bat
com o argumentoclient
cria um certificado de cliente chamado Client.com e exporta o certificado do cliente para um arquivo chamado Client.cer.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.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 importará 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 importará o certificado do cliente do arquivo Client.cer para o repositório LocalMachine – TrustedPeople.
No computador de serviço, compile 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, 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
.