msdn14_capa.gif

Clique aqui para ler todos os artigos desta edição

Protegendo os Web Services com WSE 2.0

por Aaron Skonnard

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Estrutura do WSE 2.0

·          Criptografia

·          Segurança em Web Services

Web Service, .NET e C#

 

Download:

ServiceStation0410.exe (148 KB)

Chapéu

WSE 2.0

 

 

Neste artigo faremos um tour nos recursos de segurança do WSE 2.0 e mostrarei como automatizar o código de segurança com políticas declarativas. Apenas a instalação do WSE 2.0 não torna os endpoints ASMX seguros. Configurar seus projetos ASMX com o WSE SoapExtension os torna capazes de processar elementos de segurança encontrados nas mensagens (como verificação de assinaturas, descriptografia de elementos e assim por diante), mas esses elementos de segurança não são exigidos pelo endpoint. Você deve realizar uma ação para requerer tais elementos de segurança, escrevendo um código ou aplicando uma política. Você também deve escrever um código ou aplicar uma política para gerar mensagens que atendam os requisitos de segurança de um endpoint seguro. Vamos começar com uma operação ASMX simples não segura:

 

[WebMethod]

public MortgagePayments CalcMortgage(

  double amount, double interest, double years,

  double annualTax, double annualIns)

{

    MortgageCalc mc = new MortgageCalc();

    return mc.CalculateMortgage(amount, years, interest,

      annualTax, annualIns);

}

 

Pela sua natureza, a operação CalcMortgage é aberta a uma variedade de ataques. Em primeiro lugar a operação pode ser chamada por qualquer pessoa. Não há como identificar o remetente e verificar se ele realmente tem direitos para realizar a operação em questão. Em segundo lugar, não há como verificar a integridade das mensagens de entrada. Partes maliciosas podem interceptar mensagens de entrada, modificá-las e encaminhá-las ao endpoint sem serem detectadas. E no final, as mensagens estão disponíveis para qualquer pessoa ler, uma vez que elas são enviadas em texto sem formatação.

Mostrarei como eliminar esses problemas um de cada vez. Primeiro você precisa solicitar que o remetente forneça um UsernameToken para fins de identificação, autenticação e autorização.

 

Solicitando UsernameTokens

Supondo-se que o WSE 2.0 esteja instalado e configurado apropriadamente, (observe que você deve ativar o WSE SoapExtension no serviço), você poderá acrescentar código ao CalcMortgage para solicitar a presença de um UsernameToken em mensagens de entrada: Você pode inspecionar os elementos WS-Security encontrados em mensagens de entrada através do objeto SoapContext. Você pode examinar o SoapContext para determinar se um UsernameToken foi fornecido pelo remetente.

Acrescentei uma nova classe ao projeto de Web Services chamada WseHelpers, que contém um método único denominado GetUsernameToken. Este método espera que o caller forneça-o com um objeto SoapContext que irá inspecionar um elemento UsernameToken, que ele retorna ao caller quando encontrado. O método gera uma exceção se ele não encontrar um UsernameToken (veja a Listagem 1).

 

Listagem 1 Solicitando um UsernameToken

public class WseHelpers

{

  public static UsernameToken GetUsernameToken(SoapContext context)

  {

    if (context == null)

      throw new Exception("Only SOAP requests are permitted.");

 

    // Verifica se existe um token

    if (context.Security.Tokens.Count == 0)

    { ...

Quer ler esse conteúdo completo? Tenha acesso completo