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.

  • 🔐 Padrão básico: O WS-Security adiciona uma camada de segurança ao SOAP, definindo como as credenciais e as chaves de criptografia trafegam dentro do cabeçalho SOAP.
  • 🌐 Limitações do HTTPS: O HTTPS/SSL protege o tráfego ponto a ponto, mas em fluxos com vários servidores, somente o WS-Security mantém a mensagem protegida de ponta a ponta.
  • 🎫 Tokens de credenciais: As credenciais são transmitidas usando um UsernameToken para nome de usuário e senha, ou um BinarySecurityToken para certificados Kerberos ou X.509.
  • 🛠️ Exemplo de compilação segura: Um serviço web .Net ASMX adiciona uma classe AuthHeader para que o cabeçalho SOAP contenha um nome de usuário e senha para autenticação.
  • 📋 Melhores Práticas: Solicitações de auditoria e registro, tracEm operações comerciais, autentique-se corretamente e nunca armazene ou registre credenciais confidenciais.

Segurança do serviço web WS

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.

Ameaças à segurança e contramedidas HTTPS

Em uma comunicação HTTPS padrão entre o cliente e o servidor, ocorrem os seguintes passos:

  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 saber que a resposta deve retornar apenas para esse 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. 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.

Ameaças à segurança e contramedidas em vários servidores

É 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:

  1. 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.
  2. 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.

Fluxo de trabalho dos Padrões de Segurança de Serviços Web

A seguir estão as etapas que ocorrem no fluxo de trabalho acima:

  1. 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.
  2. O token de segurança é então passado para o cliente de serviço da Web.
  3. 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.
  4. 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.

Construir um novo projeto de Serviços Web Seguros

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,

  1. 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.
  2. 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.

Detalhes do projeto Criar Serviços Web Seguros

Após a conclusão, você verá o arquivo de projeto criado no explorador de soluções do Visual Studio 2013.

Crie um explorador de soluções de serviços web seguros

Passo 3) Nesta etapa, vamos adicionar um arquivo de serviço Web ao nosso projeto.

  1. Primeiro, clique com o botão direito do mouse no arquivo do projeto, como mostrado abaixo.

Criar projeto de Serviços Web Seguros (clique com o botão direito do mouse)

  1. 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.

Criar serviços web seguros, adicionar 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.

Diálogo de nome para Criar Serviços Web Seguros

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.

Criar código de cabeçalho de autenticação para serviços web seguros

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code Explicação:

  1. 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.
  2. 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.

Tutorial para criar serviços web seguros - Código do serviço

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:

  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 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 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:

Criar saída de serviços web seguros

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.

Descrição do serviço Criar Serviços Web Seguros

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Perguntas Frequentes

A IA pode monitorar o tráfego de serviços web em tempo real, detectar padrões de requisição incomuns e sinalizar possíveis ataques, como injeção de código ou abuso de tokens. Ela também pode analisar configurações WSDL e SOAP em busca de autenticação fraca ou criptografia ausente.

Sim. Modelos de aprendizado de máquina treinados com tráfego normal podem detectar anomalias como preenchimento de credenciais, cabeçalhos SOAP malformados ou ataques de repetição. As equipes de segurança ainda devem revisar os alertas antes de bloquear solicitações para evitar interrupções em clientes legítimos.

O HTTPS criptografa a conexão entre dois pontos, portanto os dados ficam expostos assim que chegam a um servidor intermediário. O WS-Security protege a própria mensagem SOAP, mantendo-a segura.ping A proteção era completa, mesmo quando os dados passavam por vários servidores.

Um UsernameToken é um elemento WS-Security inserido no cabeçalho SOAP que contém um nome de usuário e, opcionalmente, uma senha. Ele permite que um serviço web autentique o solicitante antes de processar a requisição.

Resuma esta postagem com: