DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da .net Magazine DIGITAL
ou para quem possui Créditos DevMedia.

Clique aqui para saber como acessar este post

1) Torne-se um assinante MVP e por apenas R$ 69,90 por mês você terá acesso completo a todos os posts. Assinar MVP

2) Adquira Créditos: comprando R$ 180,00 em créditos esse post custará R$ 1,20. Comprar Créditos

.net Magazine 98 - Índice

Tipos de Segurança no WCF - Revista .net Magazine 98

Este artigo demonstra como funciona a criação de serviços no WCF (Windows Communication Foundation). A ideia é entender como criar serviços seguros para garantir os sigilos de possíveis informações.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

Ao se falar em software distribuído, estamos falando em informações que são trafegadas por caminhos que não são de responsabilidade das empresas, como a internet, por exemplo. Este é um cenário repleto de riscos e ameaças, pois pessoas mal intencionadas podem ter acesso a informações sigilosas. Porém, para facilitar o desenvolvimento de soluções que atendam a essas e outras necessidades do mundo real foi implementado no .NET Framework um recurso chamado de Windows Communication Foundation.

O objetivo deste artigo é abordar as questões mais importantes na segurança de serviços desenvolvidos no WCF. Serão mostrados na prática os tipos de segurança suportados pelo mesmo. Para isso, iremos desenvolver um serviço que recupere uma lista de clientes para um parceiro (consumidor) e entender como aplicar uma proteção para garantir a integridade e confidencialidade desses dados transportados pelo serviço.

Segurança no WCF
Podemos dizer que a segurança no WCF se preocupa com a proteção dos serviços e dados trafegados entre os participantes. Em geral, o aspecto mais comum de proteção é o conceito de autenticação.

Entretanto, em um ambiente distribuído a segurança se divide em diversos fatores:

Garantir o sigilo - proteger as comunicações entre fornecedores de serviços e consumidores. Por exemplo, um serviço exposto na internet e que trafega dados confidenciais de uma organização pode ser consumido por pessoas não autorizadas ou até mesmo, ter suas mensagens interceptadas por programas ou pessoas mal intencionadas. Normalmente, se consegue preservar esses dados com mensagens criptografadas.

Impedir adulteração ou corrupção das mensagens: em um cenário vulnerável, usuários maliciosos podem se aproveitar de falhas de segurança e corromper ou adulterar mensagens transitadas antes que cheguem ao seu destino, causando um grande impacto na qualidade da informação e integridade dos dados. Uma maneira de solucionar esse problema seria utilizar técnicas como hashing de mensagens e geração de assinaturas digitais. O hashing consiste de um embaralhamento e codificação do conteúdo de uma mensagem, resultando em um valor criptográfico. Por exemplo, em uma operação de hashing o texto “DevMedia” poderia ser transformado na seguinte cadeia de caracteres: “DFD 7558 7D88”. Esse valor também pode ser utilizado para verificar se o conteúdo de uma mensagem sofreu alteração, visto que qualquer modificação feita no texto original, irá gerar um valor hash diferente.

Garantir a entrega das mensagens: mesmo que uma mensagem seja interceptada e o usuário malicioso não consiga decifrar o código de segurança, ele pode interceptar a mensagem repetidamente com “ataque de repetição” e evitar a entrega dos dados, resultando em erro de funcionamento. Um ataque de repetição consiste da técnica de bombardear um determinado servidor/serviço com milhares de acessos simultâneos, sobrecarregando sua capacidade de resposta e consequentemente tirar o serviço atacado de operação.

Criando o projeto base
Vamos agora criar uma solução com três projetos que irão servir de base para implementação de segurança no serviço com WCF. Para isso, considere uma empresa chamada EContratante que queira fazer uma pesquisa de satisfação de seus clientes, então esta decide contratar os serviços de uma empresa especializada em pesquisas, a qual chamaremos de EPesquisa. A empresa EPesquisa irá precisar da relação de todos os clientes da EContratante para realizar a pesquisa de satisfação.

Os projetos serão divididos em:

• WCFConsumer: projeto do tipo Windows Form, responsável por conter o formulário que apresenta ao usuário a relação de todos os clientes da empresa EContratantes para a empresa EPesquisa.
• WCFService: responsável por implementar o serviço que fornece a lista com todos os clientes da empresa EContratante.
• DataCliente: responsável por conter o mapeamento do banco de dados da empresa EContratante.

O projeto base
Os exemplos foram criados e implementados com as ferramentas apresentadas a seguir:
• Visual Studio 2010 Professional;
• SQL Server 2008 Express;
• Internet Information Services (IIS) 7.5;
• Microsoft Windows 7 Professional (Users/Groups).



Deve ser criado um banco de dados que irá conter uma tabela que armazenará todos os clientes da empresa EContratante. Assim, foi criado no SQL Server um novo banco de dados chamado “WCFSecurity” e nele foi adicionada uma tabela com o nome “Clientes” e os campos conforme apresentados na Tabela 1.

Coluna Tipo Permite nulo
ID int
NOME nvarchar(100) 
CIDADE nvarchar(50) 
ESTADO nchar(2) 
SEXO nchar(1) 
TELEFONE nvarchar(20) 
Tabela 1. Campos disponíveis na tabela clientes

Também foi criado um projeto web de nome DataClientes. Nele foi adicionado um ADO.NET Entity Data Model chamado Clientes.edmx que foi conectado ao banco WCFSecurity, criado anteriormente e que mapeia a tabela dbo.Clientes. O Entity Data Model (EDM) é o componente do Entity Framework (Figura 2), onde o mapeamento objeto/relacional é expresso. O EDM descreve o banco de dados, o modelo de classes e seu mapeamento (que fornece os metadados necessários para que o Entity Framework possa resolver os problemas de impedância). Esse mapeamento expresso no EDM possibilita que, por exemplo, não seja necessária a utilização de uma mesma convenção de nomes para tabelas e classes, desamarrando completamente aplicação e fonte de dados. Entity SQL e LINQ to Entities são as linguagens de consulta utilizadas para realizar pesquisas baseadas no EDM. Object Services é a camada que expõe as APIs de consulta, além de ser responsável pelo gerenciamento e transformação dos dados obtidos pelo Entity Client Data Provider (Entity Client a partir de agora), que tem estrutura tabular, em objetos (este processo é conhecido como materialização e obedece ao mapeamento realizado no arquivo EDM). O Entity Client faz a comunicação com os providers ADO.NET, que em última instância comunicam-se com a base de dados. Essa camada traduz consultas Entity SQL e LINQ to Entities para instruções SQL.
"

A exibição deste artigo foi interrompida

Este post está disponível para assinantes MVP.



Mestrando em Engenharia da Computação com ênfase em Engenharia de Software pelo IPT/USP e especialista em engenharia e arquitetura de software. Pós Graduado pelo Instituto Brasileiro de Tecnologia Avançada IBTA em Engenharia de So [...]

O que você achou deste post?
Serviços

Mais posts