WebServices – Aspectos de Segurança
O conceito de WebServices não é novidade nos meios da computação. Trata-se de expor serviços através de algum tipo
de interface, de forma que outros possam acessá-los. Sob este ponto de vista, não apresentam grandes diferenciais
em relação aos antigos RPC (Remote Procedure Call), CORBA (Common Object Request Broker Architect), etc. No
entanto, uma série
de características específicas vêm fazendo com que os WebServices mereçam mais atenção. Entre elas, destacam-se:
- Metodologia e linguagem padrões para a exposição das interfaces:
Os WebServices utilizam XML[1] (eXtensible Markup Language) como linguagem básica e o WSDL[2] (WebServices
Description Language - dialeto XML) como forma de descrição das interfaces, ou seja, linguagens são padronizadas,
públicas e de fácil aceitação;
- Total independência de plataforma e linguagem de programação:
Os WebServices podem ser escritos em qualquer linguagem de programação e executados em qualquer plataforma de
hardware e software. Esta característica é uma das mais importantes e permite que sistemas legados possam ser
totalmente reaproveitados construindo-se, apenas, um wrapper que permita sua utilização por outros sistemas.
- Podem utilizar vários tipos de protocolo de transporte, embora o mais utilizado atualmente seja o http ou https[4].
Vamos pensar, por exemplo, em uma transação de compra via Internet na qual, ao final da operação, o comprador informa
seu endereço e o sistema calcula o frete para a entrega dos produtos. Todo processo de cálculo de frete pode ser
encapsulado em um WebService. Desta forma, a plataforma de comércio eletrônico usada na transação em questão,
apenas faz a chamada "Cálculo de frete ao WebService". Este pode ter vida completamente independente do sistema
de comércio eletrônico, tanto nas questões técnicas (plataforma, linguagem, etc) como nas questões geográficas
(localização) e de gerenciamento (quais os perfis que o controlam). Da mesma forma que houve o isolamento do cálculo
de frete em um WebService, outros sub-sistemas também poderiam ter tratamento semelhante (status da ordem de
compra, acesso ao meio de liquidação financeira, etc).
Além de operações B2C, os WebServices vêm ganhando muita relevância nos outros segmentos, principalmente no
mundo B2B e B2G. O objetivo é o de termos comunicação entre este conceito de forma bastante automatizada, inclusive
com serviços espontâneos de localização, descrição de características e integração. Nesta linha UDDI[3] (Universal Description,
Discovery and Integration) vem se mostrando como uma tendência.
Mas o estágio atual dos WebServices ainda carece de mais desenvolvimentos. Muitos chegam a afirmar que estes
aplicativos são muito simples pois resolvem problemas simples. Desta forma, colocam em questão a sua capacidade de
resolver questões mais complexas sem que se tornem, também, piores do que no estágio atual.
De toda forma, os WebServices já passaram pela fase dos "early adopters" e começam a serem adotados em maiores
quantidades e para solução de problemas mais complexos e críticos para a operação das empresas. Nessa adoção em
situações reais, algumas necessidades se fazem imediatas, sendo uma delas (talvez a principal) a questão da segurança.
Na medida que WebServices disponibilizam serviços para o mundo algumas preocupações com segurança aparecem de
imediato, entre elas:
- Como garantir a quem está acessando o serviço que o provedor é realmente quem se diz ser;
- Como garantir ao provedor do serviço que quem está acessando possui perfil compatível para acessá-lo;
- Como garantir que os dados que estejam trafegando entre as partes não foram adulterados, violados, etc.
A solução atualmente disponível é a segurança no protocolo de transporte, através do uso do https[4]. No entanto, esta
solução não é totalmente suficiente nem adequada para resolver todos os problemas.
As mensagens trocadas pelos WebServices são encapsuladas em envelopes SOAP[5] (simple obejct access protocol).
Estes envelopes permitem identificação do destinatário, do serviço que se está querendo acessar, dos parâmetros
necessários para a execução do serviço, etc. Apenas para exemplificar as dificuldades não endereçadas, caso este
envelope SOAP seja criptografado como um todo, numa transação com mais de 2 participantes (o que é bastante comum
em sistemas reais), haveria necessidade de conhecimento das chaves de criptografia por todas as partes, o que
diminuiria significativamente o nível de segurança do sistema em questão.{mospagebreak }
As necessidades de segurança em WebServices passam portanto pela segurança a nível do SOAP, ou mais
especificamente, a nível de campos XML, diminuindo-se assim a granularidade. Várias iniciativas vem sendo tomadas
http://www.pulso.com.br - Pulso
Powered by Mambo
Generated: 16 May, 2008, 13:21
para equacionar estas necessidades, entre elas o ws-security[5]. De toda forma, estas iniciativas ainda estão na fase de
termino de especificação e o mercado necessita de algum tipo de solução imediata para poder colocar sistemas baseados
em WebServices em produção com total segurança.
Entrando na seara da adoção prática destes mecanismos de segurança, seria muito interessante se pudéssemos contar
com uma infra-estrutura capaz de oferecer serviços que permitam implantá-la da forma mais automatizada possível. Isto
para evitarmos que cada um dos serviços tenham que implementar os mecanismos de segurança individualmente, o que
levaria indubitavelmente a:
- Replicação de código;
- Complexidade excessiva dos módulos;
- Aumento do custo de infra-estrutura;
- Diminuição dos níveis de segurança.
Uma solução bastante interessante está baseada nos conceitos utilizados em sistemas de single signon[6]. A idéia é
concentrarmos os mecanismos de segurança em um "servidor de políticas de segurança" (PolicyServer) e instalarmos um
agent no web server que está sendo utilizado para servir o WebService. A figura abaixo mostra esta arquitetura.
A seguinte seqüência ocorre quando um determinado cliente pretende utilizar o WebService:
1. Cliente de um WS cria um "SOAP request message". Esta mensagem já possui incorporada informações
necessárias para autenticação/autorização do cliente ("security tokens");
2. O WSAgent intercepta o pedido, captura os "security tokens" e os envia os para o PolicyServer;
3. O PolicyServer checa as informação contra suas bases de dados e envia a resposta;
4. O WSAgent checa a resposta do PolicyServer;
5. Se autorização OK, o WSAgent acrescenta informações da autorização na mensagem SOAP;
6. A mensagem é passada para o WS que está sendo requisitado;
7. O Cliente recebe uma resposta "SOAP reponse message".
Obs.: A obtenção dos "security tokens" não está descrita aqui. Pode utilizar diversos tipos de mecanismos, dentre os
quais "username/password", certificados x.509 e "tokens kerberous".
Esta solução possui, entre outros, os seguintes pontos positivos:
- Apresenta uma solução imediata para prover segurança em sistemas que utilizam WebServices;
- Os WebServices em si, não implementam a lógica de segurança, tornado o código mais simples e seguro;
- Toda lógica de segurança está concentrada em um único Ponto (PolicyServer) o que permite manutenção mais
simples, maior segurança e menor custo das plataformas.
Cabe ressaltar que a solução proposta utiliza como base protocolos padrão de mercado, tais como XML Signature[7] e
XML Encryption[8], SAML Authentication, etc.
Conclusões:
- WebServices passarão a ser parte fundamental das soluções de sistemas internet nos próximos anos, principalmente em
B2B e B2G;
- Os mecanismos de segurança para WebServices ainda não estão totalmente padronizados, principalmente no aspecto
de implementação;
- Para que sistemas baseados em WebServices sejam colocados em produção, os mecanismos de segurança precisam
ser resolvidos;
- Devemos adotar soluções de segurança flexíveis, que permitam a evolução dos mecanismos de segurança com um mínimo
custo de manutenção;
- A solução descrita acima resolve grande parte das preocupações descritas.
Referências: [1]-xml: http://www.w3.org/XML/ [2]-wsdl: http://www.w3.org/TR/wsdl [3]-uddi: http://www.uddi.org/ [4]https: http://developer.netscape.com/docs/manuals/security/sslin/contents.htm [5]-ws-security:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwssecur/html/securitywhitepaper.asp [6]-single signon:
http://www.pulso.com.br/portugues/conteudo/produtos/signon.htm [7]-XML Signature: http://www.w3.org/TR/xmldsigcore/ [8]-XML Encryption: http://www.w3.org/Encryption/2001/
http://www.pulso.com.br - Pulso
Powered by Mambo
Generated: 16 May, 2008, 13:21
http://www.pulso.com.br - Pulso
Powered by Mambo
Generated: 16 May, 2008, 13:21
Download

Arquiterura Orientada a serviços (SOA)_WebServices