LAYERDEV

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

WebService utilizando soapHeader e token



Data Publicação: 24/3/2009 10:38:25
Total de visualizações: 3489

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras



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.



Total de visualizações: 3489
voltar   comente  subir


Comentários:

Comentado por: Denis Caggiano - 20/7/2009 0:00:00
Olá Maurício,
Etou fazendo um WebService do meu sistema web que exige login e senha. Realmente eu iria fazer da maneira errada, passar login e senha como parâmetros.
Pergunta:
Desta forma que você explicou, seria como passar 3 parâmetros. Primeiro a chave e depois login e senha?
Se sim, pensando que a chave é fixa, o que tem de seguro? Seria como eu enviar como parâmetro login, senha e CPF do usuário.

Grato.
Comentado por: Mauricio Junior - MCP, MCAD, MVP Microsoft - 24/7/2009 0:00:00
Olá Denis, é o seguinte: primeiro de tudo o seu webservice deve ter um token dinâmico, você tem que ter uma forma que tal pessoa mesmo tendo usuário e senha mas não tendo o token não vai acessar o sistema. É bom você fazer soapheader com esses três parâmetros de entrada para depois verificar os outros parâmetros, entendeu? Respondendo a sua dúvida, não deve ser fixo e sim dinâmico, eu escrevi no artigo fixo para não gerar outros e outros para mostrar como funcionava. Qualquer dúvida, favor entrar em contato.

Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

CES 2008: Keynote do Bill Gates
Lendo Arquivo txt usando Visual Studio.NET 2005
Gerando Relatório e Exportando para o Excel Com Visual Studio.Net 2005
WebService - Desenvolvimento Parte 1
Vídeo Microsoft Visual SourceSafe Parte III 3/3
Visual Source Safe ? Série 2
Web Administration Tool
Projeto Natal é mostrado para a mídia
Sistema de Login em ASP – Parte IX (Utilizando três camadas)
Trabalhando com Cookie usando Visual Studio.NET 2005 (parte I)
Internet Explorer 9
Não publicação
II Encontro .NET em Brasília
Controle de peso mobile
Formatando String de Vários Tipos
Como fechar todos os forms de um aplicativo para dispositivo móvel
Vídeo - Teste do Windows 7 RC
Sistema ASP 3.0 utilizando 3 camadas – Parte 1
IsDecimal
GridView Parte I
XmlDataSource
SELECT INSERT
Insistência com Vírus por E-mail
Microsoft Research Laptop Multi-Touch
Event Log Parte II - Visual Studio.NET 2005
Vídeo - Mitos da bateria
Windows Phone 7 Jump Start
Misturando dados
SQLEngine Utilizando Upgrade
Promoção semanal de e-Books .NET
Vídeo Aula: Criando e Publicando Site de uma melhor maneira com C#.NET
Fotos do HTC Mozart
Ophone The Microsoft - Vídeo
Windows Home Server
Sistema de Login em ASP – Parte II
Sobre o Autor
  [sumir] [aparecer]
 
Mauricio Junior Maurício Júnior
Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 27 anos e possuo sete livros publicados pela editora Ciência Moderna no ano de 2009. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog:  blog.mauriciojunior.orgSite pessoal  www.mauriciojunior.org

Informaes Online
Usurios Online: 100
Artigos:  749
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC