Tutorial de segurança de serviço da Web (WS) com exemplo de SOAP

O que é Segurança WS?

Segurança WS é um padrão que aborda a segurança quando os dados são trocados como parte de um serviço da Web. Este é um recurso chave do SOAP que o torna muito popular para a criação de serviços da Web.

A segurança é um recurso importante em qualquer aplicativo da web. Como quase todos os aplicativos da web estão expostos à Internet, sempre há uma chance de uma ameaça à segurança dos aplicativos da web. Portanto, ao desenvolver aplicativos baseados na web, é sempre recomendável garantir que o aplicativo seja projetado e desenvolvido com a segurança em mente.

Neste tutorial, você aprenderá-

Ameaças de segurança e contramedidas

Para entender as ameaças à segurança que podem ser hostis a um aplicativo da web, vamos examinar um cenário simples de um aplicativo da web e ver como ele funciona em termos de segurança.

Uma das medidas de segurança disponíveis para o HTTP é o protocolo HTTPS. HTTPS é a forma segura de comunicação entre o cliente e o servidor na web. HTTPS faz uso da camada Secure Sockets ou SSL para comunicação segura. Tanto o cliente quanto o servidor terão um certificado digital para se identificarem como genuínos quando ocorrer alguma comunicação entre o cliente e o servidor.

Em uma comunicação HTTPS padrão entre o cliente e o servidor, as seguintes etapas ocorrem

  1. 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 que saiba que a resposta só deve voltar para este cliente.
  2. O servidor então se autentica para o cliente enviando seu certificado. Isso garante que o cliente esteja se comunicando com o servidor correto.
  3. Depois disso, toda a comunicação entre o cliente e o servidor é criptografada. Isso garante que, se qualquer outro usuário tentar quebrar a segurança e obter os dados necessários, eles não serão capazes de lê-los porque eles estarão criptografados.

Mas o tipo de segurança acima não funcionará em todas as situações. Pode chegar um momento em que o cliente pode se comunicar com vários servidores. Um exemplo fornecido a seguir mostra um cliente conversando com um banco de dados e um servidor da web ao mesmo tempo. Nesses casos, nem todas as informações podem passar pelo protocolo https.

É aqui que o SOAP entra em ação para superar esses obstáculos, tendo a especificação WS Security em vigor. Com esta 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 informações mencionadas abaixo

  1. Se a mensagem dentro do corpo SOAP foi assinada com qualquer chave de segurança, essa chave pode ser definida no elemento de cabeçalho.
  2. Se qualquer elemento no Corpo SOAP for criptografado, o cabeçalho conterá as chaves de criptografia necessárias para que a mensagem possa ser descriptografada quando chegar ao destino.

Em ambientes de vários servidores, a técnica acima de autenticação SOAP ajuda da seguinte maneira.

  • Como o corpo do SOAP é criptografado, ele só poderá ser descriptografado pelo servidor da web que hospeda o serviço da web. Isso ocorre devido à forma como o protocolo SOAP é projetado.
  • Suponha que se a mensagem for passada para o servidor de banco de dados em uma solicitação HTTP, ela não pode ser descriptografada porque o banco de dados não possui mecanismos adequados para isso.
  • Somente quando a solicitação realmente chegar ao servidor da Web como um protocolo SOAP, ele será capaz de decifrar a mensagem e enviar a resposta apropriada de volta ao cliente.

Veremos nos tópicos subsequentes como o padrão de segurança WS pode ser usado para SOAP.

Padrões de segurança de serviços da Web

Conforme discutido na seção anterior, o padrão WS-Security gira em torno de ter a definição de segurança incluída no cabeçalho SOAP.

As credenciais no cabeçalho SOAP são gerenciadas de 2 maneiras.

Primeiro, ele define um elemento especial chamado UsernameToken. Isso é usado para passar o nome de usuário e a senha para o serviço da web.

A outra maneira é usar um token binário por meio do BinarySecurityToken. Isso é usado em situações em que técnicas de criptografia como Kerberos ou X.509 são usadas.

O diagrama abaixo mostra o fluxo de como o modelo de segurança funciona no WS Security

Abaixo estão as etapas que ocorrem no fluxo de trabalho acima

  1. Uma solicitação pode ser enviada do cliente de serviço da Web para o Serviço de Token de Segurança. Este serviço pode ser um serviço da web intermediário que é construído especificamente para fornecer nomes de usuário / senhas ou certificados para o serviço da web SOAP real.
  2. O token de segurança é então passado para o cliente de serviço da web.
  3. O cliente de serviço da Web então chamou o serviço da Web, mas, desta vez, garantindo que o token de segurança esteja integrado na mensagem SOAP.
  4. O serviço da Web então entende a mensagem SOAP com o token de autenticação e pode então contatar o serviço do Token de Segurança para ver se o token de segurança é autêntico ou não.

O fragmento abaixo mostra o formato da parte de autenticação que faz parte do documento WSDL. Agora, com base no snippet abaixo, a mensagem SOAP conterá 2 elementos adicionais, sendo um o nome de usuário e o outro a senha.

 

Quando a Mensagem SOAP é realmente passada entre os clientes e o servidor, a parte da mensagem que contém as credenciais do usuário pode ser semelhante à mostrada acima. O nome do elemento wsse é um elemento especial denominado definido para SOAP e significa que ele contém informações baseadas em segurança.

Como construir serviços da web seguros

Agora vamos dar uma olhada no exemplo de segurança de serviço da web SOAP. Construiremos uma segurança de serviço da web com base no exemplo demonstrado anteriormente no capítulo SOAP e adicionaremos uma camada de segurança a ela.

Em nosso exemplo, vamos criar um serviço web simples, que será usado para retornar uma string para o aplicativo que chama o serviço web. Mas, desta vez, quando o serviço da web é invocado, as credenciais precisam ser fornecidas ao serviço de chamada. Vamos seguir as etapas abaixo para criar nosso serviço da web SOAP e adicionar a definição de segurança a ele.

Passo 1) A primeira etapa é criar um aplicativo Web Asp.Net vazio. No Visual Studio 2013, clique na opção de menu Arquivo-> Novo projeto.

Depois de clicar na opção Novo Projeto, o Visual Studio exibirá 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,

  1. Certifique-se de escolher primeiro o modelo da web C # para o aplicativo ASP.NET. O projeto tem que ser deste tipo para criar um projeto de serviços da web. Ao escolher esta opção, o Visual Studio executará as etapas necessárias para adicionar os arquivos exigidos por qualquer aplicativo baseado na web.
  2. Dê um nome para o seu projeto que, em nosso caso, foi dado como ' webservice.asmx. 'Em seguida, certifique-se de fornecer um local onde os arquivos do projeto serão armazenados.

Uma vez feito isso, você verá o arquivo de projeto criado em seu gerenciador de soluções no Visual Studio 2013.

Etapa 3) Nesta etapa,

Vamos adicionar um arquivo de serviço da Web ao nosso projeto

  1. Primeiro clique com o botão direito no arquivo de projeto como mostrado abaixo

  1. Depois de clicar com o botão direito do mouse no arquivo de projeto, você tem a chance de escolher a opção 'Adicionar-> Serviço da Web (ASMX) para adicionar um arquivo de serviço da web. Basta fornecer um nome de Serviço de tutorial para o arquivo de nome do serviço da web.

A etapa acima exibirá uma caixa de diálogo, na qual é possível inserir o nome do arquivo do serviço da web. Portanto, na caixa de diálogo abaixo, insira o nome de TutorialService como o nome do arquivo.

Passo 4) Adicione o seguinte código ao seu arquivo asmx do Tutorial Service. O fragmento de código abaixo é usado para adicionar uma classe customizada 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; } } 

Explicação do código: -

  1. Agora estamos criando uma classe separada chamada AuthHeader que é do tipo Classe SoapHeader . Sempre que você quiser alterar o que é passado no cabeçalho SOAP, é necessário criar uma classe que usa a classe SoapHeader embutida de .Net. Personalizando o SOAPheader, agora podemos passar um 'Nome de usuário' e 'Senha' quando o serviço da web é chamado.
  2. Em seguida, definimos as variáveis ​​de 'UserName' e 'Password' que são do tipo string. Eles serão usados ​​para manter os valores de nome de usuário e senha que são passados ​​para o serviço da web.

Etapa 5) Na próxima etapa, o código a seguir precisa ser adicionado ao mesmo Arquivo TutorialService.asmx . Este código realmente define a função de nosso serviço da web. Esta função retorna uma string 'Este é um serviço da Web Guru99' para o cliente. Mas, desta vez, a string só será retornada se o aplicativo cliente passar as credenciais para o serviço da 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); } eise return 'This is a Guru99 Web service'; } 

Explicação do código: -

  1. 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.
  2. O atributo [SoapHeader] é usado agora para especificar que, quando o serviço da Web é chamado, ele precisa ter o nome de usuário e a senha passados.
  3. Neste bloco de código, estamos examinando o nome de usuário e a senha passados ​​quando o serviço da web é chamado. Se o nome de usuário for igual a 'Guru99' e a senha for igual a 'Guru99Password', a mensagem 'Este é um serviço da Web Guru99' será passada ao cliente. Caso contrário, um erro será enviado ao cliente se o ID de usuário e a senha incorretos forem passados.

Se o código for executado com êxito, a seguinte saída será exibida quando você executar o código no navegador.

Saída:

A saída acima é mostrada quando o programa é executado, o que significa que o serviço da Web agora está disponível. Vamos clicar no link Descrição do serviço.

A partir da descrição do serviço, você agora poderá ver que o nome de usuário e a senha são elementos do arquivo WSDL. Esses parâmetros precisam ser enviados quando o serviço da web é chamado.

Práticas recomendadas de segurança de serviços da Web

A seguir estão as considerações de segurança que devem ser observadas ao trabalhar com serviços da Web

  1. Auditoria e gerenciamento de registro - Use o log do aplicativo para registrar todas as solicitações, que chegam aos serviços da web. Isso fornece um relatório detalhado sobre quem invocou o serviço da web e pode ajudar na análise de impacto se ocorrer alguma violação de segurança.

  2. Fluxo de chamadas para o serviço web - Procure observar o fluxo das chamadas nos serviços web. Por padrão, um aplicativo pode chamar várias solicitações de serviços da web com tokens de autenticação passados ​​entre esses serviços da web. Todas as chamadas entre os serviços da web precisam ser monitoradas e registradas.

  3. Informação sensível - Não inclua informações confidenciais em suas entradas de registro, como senhas ou números de cartão de crédito ou qualquer tipo de outra informação confidencial. Se houver um evento que contenha alguma dessas informações, ele precisa ser descartado antes de ser registrado.

  4. Rastreie as operações de negócios - Rastreie operações de negócios significativas. Por exemplo, instrumentalize seu aplicativo para registrar o acesso a métodos e lógicas de negócios particularmente confidenciais. Vamos dar um exemplo de um aplicativo de compras online. Existem várias etapas em um aplicativo típico, como a escolha dos itens a serem comprados, os itens carregados no carrinho e, em seguida, a compra final. Todo o fluxo de trabalho de negócios precisa ser rastreado pelo serviço da web.

  5. Autenticação Adequada - A autenticação é o mecanismo pelo qual os clientes podem estabelecer sua identidade com o serviço da web usando um determinado conjunto de credenciais que podem provar essa identidade. Nunca se deve armazenar as credenciais do usuário e, portanto, se o WS Security for usado para chamar o serviço da web, deve-se observar que o serviço da web não deve armazenar as credenciais que são enviadas no cabeçalho SOAP. Eles devem ser descartados pelo serviço da web.

Resumo

  • O SOAP fornece uma camada adicional chamada Segurança WS para fornecer segurança adicional quando as chamadas são feitas para serviços da web.
  • O WS Security pode ser chamado com um nome de usuário ou senha simples ou pode ser usado com certificados binários para autenticação
  • Vimos que em .Net podemos personalizar o serviço da Web para que um nome de usuário e uma senha sejam passados ​​como parte do elemento de cabeçalho SOAP.