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 Lima



Objetivos: Abordar de forma prática a estrutura de segurança do WCF e mais especificamente a área de segurança de transporte.

Aplica-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.

http://technet2.microsoft.com/WindowsServer/en/library/0c828f40-a479-44a2-9b82-4653896c86281033.mspx?mfr=true

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:

http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=49ae8576-9bb9-4126-9761-ba8011fabf38&displaylang=en.

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

Leonardo Bruno Bentes Lima

Leonardo Bruno Bentes Lima - Microsoft Most Valuable Professional, consultor em tecnologia .NET. Possui ampla experiência no desenvolvimento e analise de sistemas, dos quais 6 anos na plataforma .Net. Palestrante em diversos eventos sobre tecnologia .NET no Brasil e exterior. Atualmente trabalha Ivia informática (www.ivia.com.br).