Desenvolvimento - Visual Basic .NET
Segurança Windows Communication Foundation - Parte II
Este artigo tem como objetivo abordar de forma prática a estrutura de segurança do WCF e mais especificamente a área de segurança de transporte.
por Leonardo Bruno Bentes LimaAplica-se a: .Net 3.0, Visual Studio 2005, SOA, Aplicações distribuídas.
Na primeira parte da matéria, vimos a estrutura de segurança do WCF, hoje vamos implementar um exemplo de segurança utilizando Transport Security com autenticação básica.
Como vimos também na primeira parte, a segurança no nível de transporte é implementada ao nível de protocolo de comunicação, como por exemplo, HHTPS. Então vamos primeiramente ver como configurar o host da aplicação WCF para suportar SSL.
Temos duas alternativas, se o host for o IIS temos que configurá-lo para aceitar SSL, para isso vou apenas postar o link onde você pode aprender a fazer isso, já que a configuração do IIS está fora do escopo da matéria.
Se o host for um processo gerenciado (Console, Windows Form ou Windows Service) temos que utilizar uma ferramenta chamada HttpCfg.exe que você pode baixar em:
Para fazermos a porta que você irá usar para o serviço WCF utilizar SSL, temos que primeiramente obter um certificado X. 509, veja como fazer aqui:
http://msdn2.microsoft.com/en-us/library/ms731899.aspx
Após o certificado ser gerado, vamos até o snap-in de certificados (Iniciar -> Executar -> MMC), vá ao menu arquivo e escolha a opção Adicionar/Remover Snap-in. Depois clique no botão Adicionar e escolha a opção: Certificados e adicione.
Localize o certifica gerado ou um pré-existente que você deseja usar e dê um duplo clique. Vá na guia detalhes e localize a opção: Impressão digital. Copie o código e cole no bloco de notas retirando todos os espaços em branco.
Agora vamos utilizar a ferramenta HttpCfg.exe. Entre no prompt de comando e digite a seguinte linha: httpcfg set ssl -i 127.0.0.1:9090 -h 0000000000000000000000000000000000000
O comando acima diz que devo utilizar SSL na porta 9090 da maquina local e para isso usar o certificado que corresponde ao número de impressão digital que você copiou previamente (substitua os zeros pelo número que está no bloco de notas).
Agora vamos construir um serviço bem simples para testar a implementação de segurança. Para isso crie um projeto Class Library e compile o assembly com o seguinte código.
<ServiceContract()> _ Public Interface ITeste <OperationContract()> _ Function Mensagem as String End Interface Public Class Teste Implements ITeste Public Function Mensagem as String Implements ITeste.Mensagem Return "Olá" End Function End Class
Vamos implementar o host para o contrato acima. Crie uma aplicação Console, adicione a referência ao assembly criado anteriormente e digite o seguinte código:
Sub Main Dim bd As New WSHttpBinding bd.Security.Mode = SecurityMode.Transport bd.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic Dim MeuHost as new ServiceHost(GetType(ClassLibrary1.Teste), New Uri("https://localhost:9090/Teste")) MeuHost.AddServiceEndPoint(GetType(ClassLibrary1.ITeste), bd, "") MeuHost.Open() Console.Writeline("Host aguardando…") Console.Writeline("Tecle algo para finalizar.") Console.ReadLine() MeuHost.Close() End Sub
Agora vamos ao Client. Crie um novo projeto Windows Application, adicione uma Service Reference apontando para o endereço do Host. Será criado uma classe Proxy com o nome TesteClient. Adicione um botão e no evento click digite o seguinte código:
Dim bd As New WSHttpBinding bd.Security.Mode = SecurityMode.Transport bd.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic Dim ed as new EndPointAddress("https://localhost:9090/Teste") Dim c as new TestClient(bd, ed) c.ClientCredentials.UserName.UserName = "Login" c.ClientCredentials.UserName.Password = "Senha" Messagebox.Show(c.Mensagem())
Conclusão: Embora não tenha apresentado todos os detalhes de implementação do serviço WCF, mas podemos ver os passos necessários para implementar uma segurança no nível de transporte, o que envolve certo conhecimento de certificados, e prévio conhecimento na criação de serviços WCF básicos. Qualquer dúvida, estarei a disposição.
Até a próxima.
Referências:
http://msdn2.microsoft.com/en-us/library/ms731204.aspx
http://msdn2.microsoft.com/en-us/library/ms729789.aspx
http://msdn2.microsoft.com/en-us/library/ms735093.aspx
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET