🔥 Articles, eBooks, Jobs, Columnist, Forum, Podcasts, Courses 🎓



WebService utilizando soapHeader e token

Saiba utilizar de forma prática e simples webservice com tok


Olá, gostaria de explicar como criar WebService com segurança um passo a passo. Muitos usuários usam essa nova tecnologia de forma errada e sem qualquer fundamento. No decorrer do artigo, você irá entender o que estou falando.

 

Requerido:

Visual Studio.NET 2008

FrameWork: 3.5

Linguagem: C#.NET

Tecnologia: WebService

 

         Geralmente um desenvolvedor de software, arquiteto ou analista de sistema coloca a segurança do WebService mais no servidor e no banco de dados; não está errado e até aconselho fazer isso. Você deve estar me perguntando, mas como eu coloco uma segurança no sistema?

         Existem alguns profissionais de WebService que não sabe como fazer a segurança de forma correta e coloca o usuário e senha como parâmetro de entrada no método.

         Trabalhei em uma empresa que tinha tudo, o servidor tinha segurança SSL para acessar, tinha segurança na senha criptografada no banco de dados mas, passava o usuário e senha como parâmetro de entrada no método; por exemplo: AbrirChamado(string usuário, string senha, string parâmetros).

         Dessa forma, não adianta ser seguro no servidor, seguro no banco de dados se a senha e usuário estão sendo passados na chamada do método. Principalmente se esses dados foram passados sem qualquer criptografia.

         To certo que, esse tipo de tecnologia é nova no mercado brasileiro, só que não existe justificativa para falta de segurança e aprender mais sobre o assunto. Um livro que escrevi em 2002, ensinei a criar e trabalhar com WebService, em 2002.

         Segue abaixo os próximos passos na criação de um WebService seguro. Lembrando que é um exemplo bem simples, mas que serve como base para customização. O primeiro é um HelloWold mesmo. (Code 1.1)

 

 

 

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;


[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


public class Service : System.Web.Services.WebService

{

    public ValidationSoapHeader Authentication;

    private const string DEV_TOKEN = "12345";

    public Service()

    {

        //Uncomment the following line if using designed components

        //InitializeComponent();

    }


    [SoapHeader("Authentication")]

    [WebMethod]

    public string HelloWorld()

    {

        if (Authentication != null && Authentication.DevToken == DEV_TOKEN)

        {

            return "Hello World";

        }

        else

        {

            throw new Exception("Authentication Failed");

        }

    }

}

 

Code 1.1

 

Explicação:

         A primeira coisa foi colocar o public ValidationSoapHeader Authentication e uma constante chamada DEV_TOKEN (private const string DEV_TOKEN = "12345";) que, serve como um “token” para ser autenticado e enviado no cabeçalho do WebService. Isso também evita do usuário comum ver o dado na assinatura do método.

         Logo depois, criei em cima do método HelloWorld uma tag chamada [SoapHeader(“Authentication”)] antes da tag de [WebMethod].

         Dentro do método verifiquei se o Authentication é igual a null e o Authentication.DevToken é igual a constante criada do token anterior, ou seja, DEV_TOKEN. Se houver essa validação, ele continua o método sem qualquer problema.

         O passo seguinte foi criar uma outra classe para colocar o cabeçalho de validação do soap header. (Code 1.2)

 

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Web.Services.Protocols;

/// <summary>

/// Summary description for ePhoneCredentials

/// </summary>

public class ValidationSoapHeader : SoapHeader

{

    private string _devToken;

    public ValidationSoapHeader()

    {
    }

    public ValidationSoapHeader(string devToken)

    {

        this._devToken = devToken;

    }

    public string DevToken

    {

        get { return this._devToken; }

        set { this._devToken = value; }

    }

}

 

Code 1.2

 

Explicação:

         Como falado anteriormente, criei uma outra classe chamada ValidationSoapHeader que extende de SoapHeader. Coloquei seus atributos colocando get e set.  

         Note que, existe um construtor da classe que recebe como parâmetro o token atribuído manualmente.  O próximo passo é: mostrar como consumir o WebService pelo cliente, passando os dados corretos dentro do SoapHeader.

         Lembro também que, pode ser colocado qualquer outro tipo de atributo no SoapHeader e verificado dentro do código. Pode ser gerado uma chave mais precisa e criptografada para a verificação também. Esse exemplo dado até o momento serve apenas como base.

 

 

localhost.ValidationSoapHeader header = new ConsoleMyCsharpClient.localhost.ValidationSoapHeader();

header.DevToken = "12345";

localhost.Service ws = new ConsoleMyCsharpClient.localhost.Service();

ws.ValidationSoapHeaderValue = header;

Console.WriteLine(ws.HelloWorld());
Console.ReadLine(); 

 

Code 1.3

 

Explicação:

         Criei uma instância do validador, coloquei o número do toeken e chamei o serviço passando o SoapHeader antes de chamar o método. Caso o método houvesse qualquer parâmetro de entrada, basta colocá-lo na chamada normalmente.

 

Bom, fico por aqui e espero ter ajudado.

Qualquer dúvida, favor entrar em contato.

Subscribe ecode10.com

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.

Log In








Top