Segurança de Serviço Web (WS) com SOAP - Exemplo
⚡ Resumo Inteligente
A segurança de serviços web (WS) é um padrão que protege os dados trocados durante uma chamada de serviço web SOAP. Este recurso explica as ameaças à segurança e suas contramedidas, os padrões de segurança WS, a criação de um serviço web seguro com credenciais e as melhores práticas de segurança para serviços web.
O que é segurança WS?
WS Security é um padrão que aborda a segurança na troca de dados em um serviço web. Essa é uma característica fundamental do SOAP, o que o torna muito popular para a criação de serviços web.
A segurança é um recurso importante em qualquer aplicação web. Como quase todas as aplicações web estão expostas à internet, sempre existe a possibilidade de ameaças à sua segurança. Portanto, ao desenvolver aplicações web, é fundamental priorizar a segurança.ping Em aplicações baseadas na web, é sempre recomendável garantir que a aplicação seja projetada e desenvolvida com a segurança em mente.
Ameaças à segurança e contramedidas
Para entender as ameaças à segurança que podem ser prejudiciais a uma aplicação web, vamos analisar um cenário simples de uma aplicação web e ver como ela funciona em termos de segurança.
Uma das medidas de segurança disponíveis para o HTTP é o protocolo HTTPS. O HTTPS é uma forma segura de comunicação entre o cliente e o servidor na internet. Ele utiliza o protocolo SSL (Secure Sockets Layer) para garantir a segurança da comunicação. Tanto o cliente quanto o servidor possuem um certificado digital que os identifica como legítimos durante a comunicação.
Em uma comunicação HTTPS padrão entre o cliente e o servidor, ocorrem os seguintes passos:
- O cliente envia uma solicitação ao servidor por meio do certificado do cliente. Quando o servidor vê o certificado do cliente, ele faz uma anotação em seu sistema de cache para saber que a resposta deve retornar apenas para esse cliente.
- O servidor então se autentica para o cliente enviando seu certificado. Isso garante que o cliente esteja se comunicando com o servidor correto.
- A partir desse ponto, toda a comunicação entre o cliente e o servidor é criptografada. Isso garante que, se outros usuários tentarem quebrar a segurança e obter os dados necessários, não conseguirão lê-los, pois estarão criptografados.
Mas esse tipo de segurança não funciona em todas as situações. Pode haver momentos em que o cliente precise se comunicar com vários servidores simultaneamente. O exemplo abaixo mostra um cliente se comunicando com um banco de dados e um servidor web ao mesmo tempo. Nesses casos, nem todas as informações podem ser transmitidas pelo protocolo HTTPS.
É aqui que o SOAP entra em ação para superar tais obstáculos, por meio da especificação WS Security. Com essa especificação, todos os dados relacionados à segurança são definidos no elemento de cabeçalho SOAP. O elemento de cabeçalho pode conter as seguintes informações:
- Se a mensagem no corpo SOAP tiver sido assinada com qualquer chave de segurança, essa chave poderá ser definida no elemento de cabeçalho.
- Se algum elemento dentro do corpo SOAP estiver criptografado, o cabeçalho conterá as chaves de criptografia necessárias para que a mensagem possa ser descriptografada quando chegar ao destino.
Em um ambiente com múltiplos servidores, a técnica de autenticação SOAP descrita acima auxilia da seguinte forma:
- Como o corpo SOAP é criptografado, ele só poderá ser descriptografado pelo servidor web que hospeda o serviço web. Isso se deve à forma como o protocolo SOAP foi projetado.
- Suponha que a mensagem seja enviada ao servidor de banco de dados em uma solicitação HTTP; ela não pode ser descriptografada porque o banco de dados não possui os mecanismos adequados para fazê-lo.
- Somente quando a solicitação chega efetivamente ao servidor web, por meio do protocolo SOAP, é que este consegue decifrar a mensagem e enviar a resposta apropriada ao cliente.
Veremos nos tópicos subsequentes como o padrão WS Security pode ser usado para SABÃO.
Padrões de segurança de serviços da Web
Conforme discutido na seção anterior, o padrão WS-Security gira em torno da inclusão da definição de segurança no cabeçalho SOAP. As credenciais no cabeçalho SOAP são gerenciadas de duas maneiras.
Primeiro, define um elemento especial chamado UsernameToken. Este é usado para passar o nome de usuário e a senha para o serviço web. A outra maneira é usar um Token Binário através do BinarySecurityToken. Este é usado em situações em que técnicas de criptografia como Kerberos ou X.509 são empregadas.
O diagrama abaixo mostra o fluxo de funcionamento do modelo de segurança no WS Security.
A seguir estão as etapas que ocorrem no fluxo de trabalho acima:
- Uma solicitação pode ser enviada do cliente do serviço Web para o Serviço de Token de Segurança. Este serviço pode ser um serviço Web intermediário, especificamente desenvolvido para fornecer nomes de usuário/senhas ou certificados ao serviço Web SOAP propriamente dito.
- O token de segurança é então passado para o cliente de serviço da Web.
- Em seguida, o cliente do serviço web chama o serviço web, mas desta vez garantindo que o token de segurança esteja incorporado na mensagem SOAP.
- O serviço Web então entende a mensagem SOAP com o token de autenticação e pode então entrar em contato com o serviço Security Token para verificar se o token de segurança é autêntico ou não.
O trecho abaixo mostra o formato da parte de autenticação que faz parte do documento WSDL. Com base nesse trecho, a mensagem SOAP conterá dois elementos adicionais: o nome de usuário e a senha.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
Quando a mensagem SOAP é efetivamente transmitida entre os clientes e o servidor, a parte da mensagem que contém as credenciais do usuário pode ter a aparência da mostrada acima. O elemento `wsse` é um nome de elemento especial definido para SOAP e significa que ele contém informações de segurança.
Como construir serviços web seguros
Agora, vejamos um exemplo de segurança para um serviço web SOAP. Criaremos um sistema de segurança para um serviço web baseado no exemplo demonstrado anteriormente no capítulo sobre SOAP e adicionaremos uma camada de segurança a ele.
Em nosso exemplo, criaremos um serviço web simples que retornará uma string para a aplicação que o invocar. Desta vez, porém, ao invocar o serviço web, as credenciais precisarão ser fornecidas ao serviço que o chamou. Sigamos os passos abaixo para criar nosso serviço web SOAP e adicionar a definição de segurança a ele.
Passo 1) O primeiro passo é criar um vazio Asp.Net Aplicativo web. No Visual Studio 2013, clique na opção de menu Arquivo->Novo projeto.
Ao clicar na opção Novo Projeto, o Visual Studio fornecerá outra caixa de diálogo para escolher o tipo de projeto e fornecer os detalhes necessários do projeto. Isso é explicado na próxima etapa.
Passo 2) Nesta etapa,
- Certifique-se de escolher primeiro o C# Modelo web para aplicação web ASP.NET. O projeto precisa ser deste tipo para que seja possível criar um projeto de serviços web. Ao escolher esta opção, o Visual Studio executará os passos necessários para adicionar os arquivos requeridos por qualquer aplicação web.
- Dê um nome para o seu projeto que no nosso caso foi dado como “serviço web.asmxEm seguida, certifique-se de indicar o local onde os arquivos do projeto serão armazenados.
Após a conclusão, você verá o arquivo de projeto criado no explorador de soluções do Visual Studio 2013.
Passo 3) Nesta etapa, vamos adicionar um arquivo de serviço Web ao nosso projeto.
- Primeiro, clique com o botão direito do mouse no arquivo do projeto, como mostrado abaixo.
- Ao clicar com o botão direito do mouse no arquivo do projeto, você terá a opção "Adicionar -> Serviço Web (ASMX)" para adicionar um arquivo de serviço web. Basta fornecer o nome "Tutorial Service" para o arquivo de serviço web.
A etapa acima abrirá uma caixa de diálogo, na qual você poderá inserir o nome do arquivo do serviço web. Portanto, na caixa de diálogo abaixo, insira o nome TutorialService como nome do arquivo.
Passo 4) Adicione o código a seguir ao arquivo asmx do Tutorial Service. O trecho de código abaixo é usado para adicionar uma classe personalizada que será usada para alterar o cabeçalho SOAP quando a mensagem SOAP for gerada. Como agora queremos adicionar credenciais de segurança ao cabeçalho SOAP, esta etapa é necessária.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Explicação:
- Agora estamos criando uma classe separada chamada AuthHeader que é do tipo Classe SoapHeaderSempre que você quiser alterar o que é passado no cabeçalho SOAP, é necessário criar uma classe que utilize a classe SoapHeader integrada do .NET. Ao personalizar o cabeçalho SOAP, agora temos a capacidade de passar um 'Nome de usuário' e uma 'Senha' quando o serviço web é chamado.
- Em seguida, definimos variáveis de 'UserName' e 'Password' que são do tipo string. Eles serão usados para armazenar os valores de nome de usuário e senha que são passados para o serviço web.
Passo 5) Na próxima etapa, o código a seguir precisa ser adicionado ao mesmo Arquivo TutorialService.asmxEste código define a função do nosso serviço web. Esta função retorna a string “This is a Guru99 Serviço Web” para o cliente. Mas desta vez, a string só será retornada se o aplicativo cliente passar as credenciais para o serviço web.
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else return "This is a Guru99 Web service"; }
Code Explicação:
- Aqui, estamos criando um objeto da classe AuthHeader que foi criada na etapa anterior. Este objeto será passado para o nosso Guru99Webservice em que o nome de usuário e a senha podem ser examinados de perto.
- O atributo [SoapHeader] é usado agora para especificar que quando o serviço Web é chamado, ele precisa ter o nome de usuário e a senha passados.
- Neste bloco de código, estamos examinando o nome de usuário e a senha passados quando o serviço web é chamado. Se o nome de usuário for igual a “Guru99” e a senha é igual a “Guru99Password”, e então a mensagem “Esta é uma GuruO serviço web "99" é passado para o cliente. Caso contrário, um erro será enviado ao cliente se o nome de usuário e a senha estiverem incorretos.
Se o código for executado com sucesso, a seguinte saída será mostrada quando você executar o código no navegador.
Saída:
A saída acima é exibida quando o programa é executado, o que significa que o serviço Web agora está disponível. Vamos clicar em Serviço. Descriptligação iônica.
Na descrição do serviço, agora você poderá ver que o nome de usuário e a senha são elementos do wsdl arquivo. Esses parâmetros precisam ser enviados quando o serviço web for chamado.
Melhores Práticas de Segurança de Serviços Web
A seguir, apresentamos as considerações de segurança que devem ser observadas ao trabalhar com serviços Web:
- Auditoria e gestão de logs – Utilize o registro de aplicativos para registrar todas as solicitações que chegam aos serviços web. Isso fornece um relatório detalhado sobre quem invocou o serviço web e pode auxiliar na análise de impacto caso ocorra alguma violação de segurança.
- Fluxo de chamadas para o serviço web – Tente observar o fluxo de chamadas nos serviços web. Por padrão, um aplicativo pode fazer várias requisições a serviços web, com tokens de autenticação sendo passados entre esses serviços. Todas as chamadas entre serviços web precisam ser monitoradas e registradas.
- Informação sensível – Não inclua informações sensíveis em seus registros, como senhas, números de cartão de crédito ou qualquer outra informação confidencial. Se houver algum evento que contenha essas informações, ele precisa ser descartado antes do registro.
- Track Negócios Operações - Track operações comerciais significativas. Por exemplo, instrumente seu aplicativo para registrar o acesso a métodos e lógica de negócios particularmente sensíveis. Considere o exemplo de uma loja online.ping aplicação. Uma aplicação típica envolve várias etapas, como a escolha dos itens a serem comprados, o carregamento dos itens no carrinho e, por fim, a compra final. Todo esse fluxo de trabalho comercial precisa ser tracvinculado pelo serviço web.
- Autenticação adequada A autenticação é o mecanismo pelo qual os clientes podem estabelecer sua identidade com o serviço web usando um conjunto específico de credenciais que comprovam essa identidade. Nunca se deve armazenar as credenciais do usuário e, portanto, se o WS Security for usado para chamar o serviço web, é importante observar que o serviço web não deve armazenar as credenciais enviadas no cabeçalho SOAP. Essas credenciais devem ser descartadas pelo serviço web.














