De que se trata o artigo

Neste arquivo serão discutidos aspectos que envolvem a utilização de mecanismos de autenticação e autorização de serviços desenvolvidos em WCF. A partir disto, será desenvolvida uma aplicação de exemplo, empregando-se para isto o mecanismo para controle de usuários e acessos conhecido como ASP.NET Membership.

Em que situação o tema é útil

O desenvolvimento de serviços em WCF envolve, em inúmeras ocasiões, a manipulação de dados restritos e dos quais se espera que a confidencialidade seja preservada. É bastante comum que durante a construção de aplicações deste tipo desenvolva-se toda uma lógica para controle de usuários e, consequentemente, quais funcionalidades podem ser consumidas. Isto tende a ser um processo dispendioso e, ainda, suscetível a vulnerabilidades de segurança. Este artigo abordará o uso dos mecanismos de segurança oferecidos pela tecnologia WCF, em conjunto com o recurso para gerenciamento de usuários conhecido como ASP.NET Membership. Com isso são apresentados meios para a concepção de soluções com um maior grau de segurança, além de aderentes a padrões empregados em larga escala pelo mercado. Tudo isto possibilitará aos desenvolvedores um maior enfoque nas funcionalidades requeridas pelo negócio, desonerando os mesmos da necessidade de se empreenderem esforços na criação de mecanismos complexos de controle de acesso.

Segurança em WCF utilizando ASP.NET Membership - Gerenciando e protegendo o acesso a serviços em WCF

Em muitas companhias as questões relativas à segurança no acesso a serviços são, via de regra, relegadas a um segundo plano durante a fase de construção da solução. Pouco se acaba fazendo e qualquer forma de controle de acesso a informações em um serviço acaba por ser implementada negligenciando uma série de fatores. Existem cenários nos quais é possível, ainda, que tais aspectos sejam sequer levados em conta. Considerando um ambiente de TI em que o vazamento, geração ou mesmo a modificação não autorizada de informações podem não apenas gerar transtornos, como comprometer a credibilidade da organização perante o público, a questão da segurança no tráfego dos dados acaba por ser de extrema relevância. A solução discutida a seguir busca apresentar meios para a criação de aplicações orientadas a serviço com um maior nível de segurança, simplificando o processo de desenvolvimento através do uso de recursos de segurança da tecnologia WCF, juntamente com o mecanismo de gerenciamento de acessos conhecido como ASP.NET Membership.

É inegável que o advento de tecnologias como Web Services e XML em muito contribuiu para uma maior integração entre sistemas informatizados. Tal fato pode ser constatado não apenas na possibilidade de troca de informações entre soluções completamente distintas dentro de uma mesma empresa, como também no intercâmbio de dados entre diferentes companhias.

Numerosas organizações como bancos e empresas de comércio eletrônico, por exemplo, têm na utilização de Web Services, seguindo uma Arquitetura Orientada a Serviços (SOA), um fator crítico para o sucesso nos negócios em que estão inseridas. Estes processos de transferência de informações envolvem ainda, dados dos mais variados tipos e origens: movimentações financeiras, estatísticas de um processo produtivo, operações envolvendo logística de materiais, etc.

Visando atender a este tipo de demanda a Microsoft concebeu como parte integrante da plataforma .NET a tecnologia WCF (Windows Communication Foundation). Esta última permite, por sua vez, o desenvolvimento de aplicações que fazem pleno uso das capacidades do framework .NET, contando com recursos para a troca de informações nos mais variados tipos de contextos, além de possibilitar uma fácil aderência das soluções criadas aos princípios da Orientação a Serviços.

Alguns exemplos de protocolos de transmissão suportados em WCF são: HTTP / HTTPS (Hypertext Transfer Protocol / Hypertext Transfer Protocol Secure, comumente empregados em Web Services); TCP (Transmission Control Protocol, neste caso está restrito apenas para o intercâmbio de informações entre aplicações em .NET); P2P (peer-to-peer); MSMQ (Microsoft Message Queuing, utilizado na implementação de serviços de mensagens).

Já no que se refere a padrões para intercâmbio de dados, a tecnologia WCF é capaz de manipular informações em formatos como: SOAP (Simple Object Access Protocol, formato baseado em XML e comumente empregado em Web Services para a transmissão de dados); RSS (Really Simple Syndication representa um conjunto de formatos empregados para a notificação de atualizações em blogs, sites de notícias, dentre outros órgãos de informação); JSON (JavaScript Object Notation, formato mais simplificado que o SOAP / XML, sendo normalmente utilizado em invocações de serviços a partir de código Javascript).

O mecanismo de gerenciamento de acesso conhecido como ASP.NET Membership foi originariamente desenvolvido para a utilização em sites desenvolvidos em ASP.NET. Este recurso permite a utilização de toda uma estrutura para controle de usuários e regras de acesso, evitando que desenvolvedores definam toda uma nova lógica de acesso do zero e acabem assim por “reinventar a roda”.

Convém ser lembrado ainda que, em muitas situações, deve-se restringir o acesso a dados dentro de uma organização. Devem ser estabelecidas para isto políticas que determinem quem está autorizado a acessar os dados e sob quais condições. Cenários comuns para isto incluem a manipulação de informações sensíveis, regulamentações governamentais ou, ainda, políticas corporativas de segurança da informação.

A solução apresentada neste artigo procura demonstrar uma alternativa na utilização de recursos de segurança dentro de uma solução desenvolvida em WCF. Para isto serão utilizados recursos de configuração desta própria tecnologia, em conjunto com as técnicas para controle de acesso disponibilizadas pelo ASP.NET Membership.

Nota do DevMan

SOA (sigla em inglês para Service Oriented Architecture) - ou Arquitetura Orientada a Serviços, em português - é um modelo de arquitetura na área de Sistemas de Informação. Tem por objetivo principal o atendimento de necessidades de negócios a partir do fornecimento de serviços agrupados em componentes (módulos) de software. A implantação desta arquitetura é feita, de maneira geral, através da utilização de Web Services, focando ainda na possibilidade de reutilização de funcionalidades já existentes e passíveis de serem expostas como serviços.

Alguns exemplos de padrões amplamente empregados na implementação de uma Arquitetura Orientada a Serviços são: o SOAP como protocolo para troca de informações; a linguagem XML (eXtensible Markup Language) para a formatação de dados; web services como componentes que implementam as funcionalidades dos serviços a serem oferecidos. Logo, por mais heterogêneos que tais ambientes possam ser, a utilização de padrões assegura a portabilidade entre as aplicações que geram os dados e aquelas que se utilizam dos mesmos.

Nota do DevMan

O JSON (JavaScript Object Notation) é uma espécie de padronização para transporte de informações entre ambientes heterogêneos e que tem como linguagem o JavaScript. Mas padrão, transporte, ambiente heterogêneo, tudo isso remete ao XML, então vem a questão: Por que JSON e não XML? O principal motivo é pelo fato da notação JSON ser extremamente mais simples do que XML. Não existem tags diversas nem regras complexas para escrita e muito menos mecanismos complexos de parser. A seguir temos a construção da sintaxe JSON:

A estrutura de dados é bem simples de trabalhar e o tempo de execução de um script lendo dados em JSON é dezenas de vezes mais rápido do que ler um conteúdo XML. Por isso, tem ganhado bastante visibilidade e se tornado uma grande alternativa para se trabalhar com AJAX.

Alguns conceitos básicos de segurança

Quando se considera a necessidade de se restringir o acesso às funcionalidades dentro de uma aplicação, dois conceitos de segurança devem ser considerados: autenticação e autorização.

Por autenticação deve-se entender, em termos gerais, como sendo o processo no qual o consumidor de um recurso apresenta sua identificação ao mecanismo responsável por prover isto. Se as credenciais forem válidas, o acesso ao provedor dos recursos é liberado; em caso negativo, impede-se tal acesso por parte da estrutura consumidora. Em aplicações distribuídas desenvolvidas em WCF, o processo de autenticação pode ser feito utilizando-se diversas técnicas, tais como empregando credenciais do Windows, por meio de usuários e senhas, com certificados digitais, etc.

A autorização consiste em se conferir, uma vez que um consumidor de um recurso tenha sido autenticado, se o mesmo tem acesso a aquilo que está requisitando. Em caso afirmativo, o acesso ao recurso em questão é concedido; do contrário impede-se que a estrutura consumidora consiga interagir com aquilo que a mesma tentou requisitar.

Outros conceitos importantes, quando se levam em conta questões que concernem à segurança de informações, são a integridade e a confidencialidade dos dados.

O conceito de integridade refere-se à garantia de que os dados que são trafegados não serão, por meios acidentais ou mesmo deliberadamente, alterados durante as etapas de transferência das informações. Já o termo confidencialidade diz respeito à característica na qual apenas partes autorizadas têm acesso a um determinado tipo de informação.

Assim, conforme será abordado neste artigo, o uso de mecanismos envolvendo técnicas de autenticação e autorização em WCF busca assegurar a confidencialidade e a integridade de informações em soluções orientadas a serviços.

ASP.NET Membership

Conforme já mencionado anteriormente, o mecanismo conhecido como ASP.NET Membership destina-se ao controle do acesso de usuários a recursos oferecidos por uma aplicação.

Esta tecnologia pode utilizar as seguintes fontes como repositório de informações no gerenciamento de usuários e regras (roles) de acesso:

· Um banco de dados SQL Server;

· O recurso Active Directory do Windows;

· Um provider customizado desenvolvido em atendimento a uma finalidade específica.

Na solução apresentada mais adiante por este artigo será feito o uso do recurso ASP.NET Membership a partir de um banco de dados SQL Server.

Segurança em WCF: uma visão geral

A forma como ocorre a troca de mensagens entre a solução que expõe um serviço e os consumidores deste representa, essencialmente, o aspecto principal a ser considerado quando da necessidade de se configurar os recursos de segurança de uma aplicação criada em WCF. Tal exposição se dá através de um ou mais endereços chamados endpoints. Cada endpoint, por sua vez, possui um conjunto de configurações na qual são especificadas características como protocolo de comunicação, padrões de serialização das informações, aspectos de segurança, dentre outros itens.

A configuração de tais detalhes de um endpoint pode ser feita tanto via código-fonte, assim como através do arquivo XML de configurações da aplicação em que o mesmo se encontrar. Esta última opção é a que talvez apresente maior flexibilidade, uma vez que modificações podem ser introduzidas sem a necessidade de alterações no código-fonte da solução em questão. Ao agrupamento de configurações que definem um endpoint dá-se o nome de binding. Alguns bindings, criados pensando-se na interoperabilidade entre soluções heterogêneas, são compatíveis inclusive com aplicações-cliente criadas em Java (ou mesmo mainframe).

É importante frisar que as diversas configurações de segurança possíveis não são compatíveis, em alguns casos, com todos os tipos de bindings existentes em WCF. Logo, será necessário analisar o nível de segurança requerido por uma aplicação, bem como a compatibilidade das opções disponíveis com os possíveis consumidores dos serviços que estão sendo criados. O serviço de exemplo que será descrito neste artigo faz uso do binding WSHttpBinding; trata-se de uma opção interoperável e na qual poderão ser testados os conceitos de segurança aqui abordados.

Dentro da tecnologia WCF dois modelos principais de segurança são suportados: Transport Security e Message Security. Ambos serão detalhados a seguir, sendo que é possível ainda combinar características dos mesmos para a proteção de mensagens (é o que será feito no serviço WCF demonstrado neste artigo).

Federated Security é um outro modelo de segurança possível de se empregar em aplicações WCF, sendo este padrão também abordado mais adiante.

Transport Security

No modo Transport Security (Figura 1) as credenciais de um usuário e outros dados de acesso são transmitidos a partir dos canais de transporte das informações. Através desta técnica consegue-se estabelecer um meio seguro de comunicação entre os dois endpoints (serviço e cliente) envolvidos no intercâmbio de informações; a isto se dá o nome de point-to-point security. Em virtude desta característica (a existência de proteção apenas no meio de comunicação entre os dois endpoints), uma possível retransmissão de uma mensagem a outros sistemas relacionados requer a abertura de uma nova conexão segura.

...
Quer ler esse conteúdo completo? Tenha acesso completo