Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

5
05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil 1/5 csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/ Página Inicial Autores Livros Forum Download Newsletter Empregos A núncios Contato Social Media Login Usuário Senha Login form protected by Login LockDown . Lembrar-me Login Cadastre-se Esqueci minha senha Pesquisar Pesquisar por: Pesquisar Encontre-nos no Facebook C# Brasil no Google+ 0 tweets Criando um Web Service seguro com SoapHeader Publicado 15 de agosto de 2008 | Por Raphael Cardoso | 8 comentários Olá pessoa, como meu primeiro artigo vou iniciar uma breve explicação de como criar um WebService seguro utilizando o SoapHeader e como acessar os seus métodos utilizando o ObjectDataSource com GridView. Apesar de o artigo estar com exemplos em C-Sharp, você poderá tranquilamente aplicá-lo em VB.NET, basta um pouco de vontade. Não irei entrar em detalhes de como criar uma conexão passo a passo, vou levar em consideração que você já sabe como fazer e esta a procura de como adicionar mais segurança a seu Web Service, mais prometo criar um artigo especialmente com esse assunto. 1- Criando o WebService Crie um novo Web Service, onde inicialmente seu código será como esse: 2- Adicionando um novo método Crie um método onde esse retorne um DataSet para mais tarde ser consumido por uma aplicação, que no nosso caso será um WebForm Pronto, já possuímos um Web Service capaz de retornar um DataSet contendo as informações que desejamos, porem esse poderá ser consumido por qualquer aplicação uma vez que for publicada na internet. Então imagine o seguinte cenário, seu Web Service possui tamb um método capaz de excluir todos os seu cliente cadastrado. Isso seria catastrófico. Com essa dica abaixo será possível proteger facilme o Web Service impedindo que outras aplicações, por mais que estejam acessando o Web Service, não sejam capaz de executar os métod sem autenticação. 3- Criando a classe de segurança Crie uma nova classe herdando a classe SoapHeader como no exemplo abaixo: C# (C-Sharp), AJAX, ASP.NET, ASP.NET MVC, WinForm, WebForm, Entity Framework, Microsoft Framework .NET, SQL Server, Fórum Sh Sh 01 /// <summary> 02 /// Summary description for MeuWebService 03 /// </summary> 04 [WebService(Namespace = "http://tempuri.org/ " )] 05 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 06 public class MeuWebService : System.Web.Services.WebService 07 { 08 public MeuWebService() 09 { 10 //Uncomment the following line if using designed components 11 //InitializeComponent(); 12 } 13 14 [WebMethod] 15 public string HelloWorld() 16 { 17 return "Hello World" ; 18 } 19 } 01 [WebMethod(Description = "Retorna todos os clientes cadastrados" )] 02 public DataSet getClientes() 03 { 04 DataSet dsClientes = null ; 05 string connectionString = "Data Source=seu_servidor_sql;User Id=seu_usuario;Password=sua_senha;Initial Catalog=seu_bd;" ; 06 07 StringBuilder sqlString = new StringBuilder(); 08 sqlString.Append( " SELECT * FROM CLIENTES " ); 09 10 using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString)) 11 { 12 connection.Open(); 13 14 using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand()) 15 { 16 command.Connection = connection; 17 command.CommandText = sqlString.ToString(); 18 19 using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command)) 20 { 21 adapter.Fill(dsClientes); 22 } 23 } 24 } 25 26 return dsClientes; 27 } 1 public class SegurancaClientes : SoapHeader 2 { 3 public string Usuario;

Transcript of Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

Page 1: Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil

1/5csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/

Página Inicial Autores Livros Forum Download Newsletter Empregos Anúncios Contato

Social Media

Login

Usuário

Senha

Login form protected by LoginLockDown.

Lembrar-me

Login

Cadastre-seEsqueci minha senha

Pesquisar

Pesquisar por:

Pesquisar

Encontre-nos no Facebook

C# Brasil no Google+

0tweets

Criando um Web Service seguro com SoapHeaderPublicado 15 de agosto de 2008 | Por Raphael Cardoso | 8 comentários

Olá pessoa, como meu primeiro artigo vou iniciar uma breve explicação de como criar umWebService seguro utilizando o SoapHeader e como acessar os seus métodos utilizando oObjectDataSource com GridView. Apesar de o artigo estar com exemplos em C-Sharp, vocêpoderá tranquilamente aplicá-lo em VB.NET, basta um pouco de vontade.

Não irei entrar em detalhes de como criar uma conexão passo a passo, vou levar em consideração que você já sabe como fazer e esta aprocura de como adicionar mais segurança a seu Web Service, mais prometo criar um artigo especialmente com esse assunto.

1- Criando o WebServiceCrie um novo Web Service, onde inicialmente seu código será como esse:

2- Adicionando um novo métodoCrie um método onde esse retorne um DataSet para mais tarde ser consumido por uma aplicação, que no nosso caso será um WebForm:

Pronto, já possuímos um Web Service capaz de retornar um DataSet contendo as informações que desejamos, porem esse poderá serconsumido por qualquer aplicação uma vez que for publicada na internet. Então imagine o seguinte cenário, seu Web Service possui tambemum método capaz de excluir todos os seu cliente cadastrado. Isso seria catastrófico. Com essa dica abaixo será possível proteger facilmenteo Web Service impedindo que outras aplicações, por mais que estejam acessando o Web Service, não sejam capaz de executar os métodossem autenticação.

3- Criando a classe de segurançaCrie uma nova classe herdando a classe SoapHeader como no exemplo abaixo:

C# (C-Sharp), AJAX, ASP.NET, ASP.NET MVC, WinForm, WebForm, Entity Framework, MicrosoftFramework .NET, SQL Server, Fórum

0

ShareShare

01 /// <summary>02 /// Summary description for MeuWebService03 /// </summary>04 [WebService(Namespace = "http://tempuri.org/")]05 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]06 public class MeuWebService : System.Web.Services.WebService07 {08 public MeuWebService()09 {10 //Uncomment the following line if using designed components11 //InitializeComponent();12 }13 14 [WebMethod]15 public string HelloWorld()16 {17 return "Hello World";18 }19 }

01 [WebMethod(Description = "Retorna todos os clientes cadastrados")]02 public DataSet getClientes()03 {

04 DataSet dsClientes = null;

05 string connectionString = "Data Source=seu_servidor_sql;UserId=seu_usuario;Password=sua_senha;Initial Catalog=seu_bd;";

06 07 StringBuilder sqlString = new StringBuilder();08 sqlString.Append(" SELECT * FROM CLIENTES ");09 10 using (System.Data.SqlClient.SqlConnection connection = new

System.Data.SqlClient.SqlConnection(connectionString))11 {12 connection.Open();13 14 using (System.Data.SqlClient.SqlCommand command = new

System.Data.SqlClient.SqlCommand())15 {16 command.Connection = connection;17 command.CommandText = sqlString.ToString();18 19 using (System.Data.SqlClient.SqlDataAdapter adapter = new

System.Data.SqlClient.SqlDataAdapter(command))20 {21 adapter.Fill(dsClientes);22 }23 }24 }25 26 return dsClientes;27 }

1 public class SegurancaClientes : SoapHeader2 {3 public string Usuario;

Page 2: Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil

2/5csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/

C# Brasil no Twitter

Willian2013 em Flag.: Boa noitepessoal! Tenho esse bloco de códigos:private void button1_Cli...http://t.co/szSJebAi #csharp #forum16 hours ago

#comentario Comentário sobreDesenvolvimento de Website comhttp://t.co/nckGn3s2 e SQL Server –Parte 1 p... http://t.co/Wt7x4Xxp #csharp1 day ago

#comentario Comentário sobreDesenvolvimento de Website comhttp://t.co/nckGn3s2 e SQL Server –Parte 1 po... http://t.co/KuGOlgEA#csharp 2 days ago

Paulo Henrique Menezes em usandoJqueryUI - Janela Modal: Valeu Raphael!http://t.co/ZldBNbhF #csharp #forum2 days ago

Raphael Cardoso em usando JqueryUI -Janela Modal: Olá Paulo! Fiz um exemplobem simples de como...http://t.co/dJIKKyXM #csharp #forum2 days ago

Enquetes

Quais assuntos gostaria de ler nospróximos artigos?

Linq ASP.NET ASP.NET MVC Silverlight Windows Azure Windows Form Outros

Vote

Ver Resultados

Arquivo de enquetes

Blogroll

ADVPL BrasilBlog do DesenvolvedorComponent FactoryDev Mobile BrasilDiário de CódigosMarcus Vinícius SiqueiraNinja CodeProgramando .NETProjetos e TITiago Lemos

Publicidade

Você poderá adiciona-lo logo abaixo da declaração dos Namespaces ou criar um novo arquivo de Classe.Agora dentro do Web Service você deverá estanciar essa nova classe:

Agora atribua o seguinte código antes da declaração do WebMethod.

Apesar de termos criado o Cabeçalho de autenticação do nosso Web Service utilizando o SoapHeader, não quer dizer que ele está protegido.

4- Como autenticar o WebServiceSerá necessário criar um novo método, só que esse não irá conter a declaração de [WebMethod], será do tipo private e não precisaremospassar nenhum argumento. Crie um método simples que retorne o Tipo Boolean ou bool e dentro dele crie seu esquema de autenticaçãoutilizando os parâmetros do SoapHeader como no exemplo abaixo.

A Credencial.Usuario e Credencial.Senha são as informação que virão de fora do Web Service pela classe de segurança.

Feito tudo isso nosso método de retorno de clientes ficara assim:

Quando nosso método for invocado de uma aplicação e ele não tiver passado antes a autenticação, ou seja se retornar false, será gerandoum Exception para a aplicação e a chamada será interrompida. Abaixo o retorno do erro:

5- Consumindo o Web Service e Autenticando um ObjectDataSource

Adicione em seu WebForm um GridView, um ObjectDataSource e faça as devidas configurações para que ele acesse o WebService e ométodo desejado.Feito isso, atribua o evento ObjectCreating ao ObjectDataSource que será onde passaremos nossa autenticação da aplicação como noexemplo abaixo:

3 public string Usuario;4 public string Senha;5 }

1 public SegurancaClientes Credencial = new SegurancaClientes();

1 [SoapHeader("Credencial")]2 [WebMethod(...

01 private Boolean Autenticou()02 {03 Boolean Autenticou = false;04 05 string Usuario = "admin";06 string Senha = "123456";

07

08 if (Credencial.Usuario == Usuario && Credencial.Senha == Senha)09 {10 Autenticou = true;11 }12 13 return Autenticou;14 }

01 [SoapHeader("Credencial")]02 [WebMethod(Description = "Retorna todos os clientes cadastrados")]03 public DataSet getClientes()04 {05 if (!Autenticou())06 {07 throw new Exception("Erro: Usuário não autenticado.");08 }09 10 DataSet dsClientes = null;11 string connectionString = "sua_connection_string";12 13 StringBuilder sqlString = new StringBuilder();14 sqlString.Append(" SELECT * FROM CLIENTES ");15 16 using (System.Data.SqlClient.SqlConnection connection = new

System.Data.SqlClient.SqlConnection(connectionString))17 {18 connection.Open();19 20 using (System.Data.SqlClient.SqlCommand command = new

System.Data.SqlClient.SqlCommand())21 {22 command.Connection = connection;23 command.CommandText = sqlString.ToString();24 25 using (System.Data.SqlClient.SqlDataAdapter adapter = new

System.Data.SqlClient.SqlDataAdapter(command))26 {27 adapter.Fill(dsClientes);28 }29 }30 }31 32 return dsClientes;33 }

01 protected void objClientes_ObjectCreating(object sender, ObjectDataSourceEventArgs e)02 {03 SegurancaClientes Credencial = new SegurancaClientes();04 Credencial.Usuario = "admin";05 Credencial.Senha = "123456";06 07 Clientes clientes = new Clientes();08 clientes.SegurancaClientesValue = Credencial;09 10 e.ObjectInstance = clientes;11 }

Page 3: Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil

3/5csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/

DELL INSPIRON ONE

2320 COMPUTADOR 2ª ...

Dell

10x R$ 209,90

DELL INSPIRON 14

NOTEBOOK

PROCESSADOR...

Dell

10x R$ 124,90

Lomadee, uma novaespécie na web. A maior

plataforma de afiliados daAmérica Latina.

O que ocorrerá acima? Quando o ObjectDataSource for criado no momento que a pagina for carregada (no caso dos WebForms) serárealizado a criação do Cabeçalho com a autenticação e enviado para o ObjectDataSource para que ele possa utilizá-lo para autenticarquando os nossos outros métodos forem invocados. Se falhar a autenticação, será gerado um Exception com a mensagem de erro.

Basicamente é isso. Mesmo que você não utilize o ObjectDataSource para consumir seus métodos do Web Service, você poderá chamar seumétodo informando qual a classe de segurança.Espero que esse artigo tenha sido de grande utilidade e caso tenham duvida deixem seus comentários.

Abraço e sucesso!!!

Posts relacionados:

1. Criando e consumindo Web Service em C-Sharp – Parte 12. Criando e consumindo Web Service em C-Sharp – Parte 23. Criando Relatório com ReportViewer em ASP.NET4. Criando eventos personalizados em UserControl no ASP.NET5. Criando Botões com Imagens

Postado em ASP.NET, C#, Visual Studio | Marcado como ASP.NET, C#, SoapHeader, SqlAdapter, SqlClient, SqlCommand, SqlConnectionVisual Studio, WebMethod, WebService

8 comentários sobre “Criando um Web Service seguro com SoapHeader”

Daniel Medina disse:14 de julho de 2011 às 17:00

Legal, mas como eu testo a autenticação pelo visual studio?

Raphael Cardoso disse:14 de julho de 2011 às 17:14

Olá Daniel, Conforme o exemplo você deverá instanciar seu webservice e passar o SoapHeader.

buddyweb disse:29 de agosto de 2011 às 15:40

Parabens pelo artigo mais nesse caso estariamos definindo o login e senha no webservice, e caso eu queria criar um login e senhaexpecifico para cada empresa que acessar meu webservice?

Raphael Cardoso disse:29 de agosto de 2011 às 16:46

Deverá no trecho do codigo do webservice onde fixamos um login e senha, implementar para que seja feito uma validação no banco dedados.Exemplo:

private Boolean Autenticou(){Boolean Autenticou = false;

string Usuario = Credencial.Usuario.Replace("'", "");string Senha = Credencial.Senha.Replace("'", "");

if (Usuario.Length > 0 && Senha.Length > 0){DWData dwData = getData();StringBuilder sqlString = new StringBuilder();sqlString.Append(" SELECT * FROM USUARIOS ");sqlString.Append(" WHERE LOGIN = '" + Usuario + "' ");sqlString.Append(" AND SENHA = '" + Senha + "' ");

DataSet dsUsuarios = dwData.getDataSet(sqlString.ToString());DataTable dtUsuarios = dsUsuarios.Tables[0];

Autenticou = dtUsuarios.Rows.Count > 0;}

return Autenticou;}

Jairo Franco Lima Gomes disse:12 de outubro de 2011 às 12:34

Muito interesante o artigo, mas não consegui executa-lo.Estou usando o Visual Studio 2008, não consegui encontrar o tipo DWData,Está em qual nomespace?

Obrigado,

Jairo

Page 4: Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil

4/5csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/

Últimos comentários

Raphael Cardoso em Desenvolvimento de Website com ASP.NET e SQL Server – Parte 1João Leles em Desenvolvimento de Website com ASP.NET e SQL Server – Parte 1Hamilton em Alterando o idioma do Visual Studio 2010 para PortuguêsGabriel Gomes em Microsoft Virtual AcademyRenan Camara em Microsoft Virtual AcademyThiago em Criando e consumindo Web Service em C-Sharp – Parte 2Thiago em Criando e consumindo Web Service em C-Sharp – Parte 1paulo em Manipulando arquivos Excel sem uso da interoperabilidade ou conexão OLEDBGeovani Dias em Alterando o idioma do Visual Studio 2010 para PortuguêsBruno em CShared #3 – [Asp.net] Problema de acentuação (Encoding)

Tags

.NET acesso a dados ADO.NET AJAX Alfredo Lotar arquivos

ASP.NET Blogosfera C# CMS CodeDom Compiler componente Content Management

Systems Cotidiano cshared CSS Desenvolver website Desenvolvimento de Website

Dicas Entity Framework filestream Framework Krypton LINQMemoryStream Microsoft MSDN MVC MySql Novatec Editora Silverlight Sistema de

gerenciamento de conteúdo Skin Sql Server streamwriter system.io VB.NETVisual Studio VisualStudio Webcast WebForm WebService windows

forms WinForm

Últimas postagens

Criando uma área AdministrativaMicrosoft Virtual AcademyBoas práticas para geração de URLsConhecendo o CELLSDKEnvio de email com PowerShellPadrões de codificaçãoN-Tiers != N-LayersDiferença entre ToString( ), Convert.ToString( ), (string) Cast, Safe CastVerificando DBNull de forma mais “elegante” com extension methods e genericsComo alterar uma classe Css via C#

Últimas mensagens do Fórum

Flag.usando JqueryUI - Janela Modalconsulta CNPJ site receita (webrequest metodo "POST")Zoom no formbanco de dados + comboboxalimentar combobox usando bindingsource e dindingnavigatorPegar retorno de uma Function sql usando c# e mysqlLer porta serial COMM1Salvar Form - HELP para um InicianteProblema com a lógica do exercicio

Raphael Cardoso disse:12 de outubro de 2011 às 21:17

Olá Jairo,

Essa é uma classe propria que criei para conexao com dados. Utilizei-a somente para exemplificar, porem falhei em nao ter descrito issoou dado uma outra alternativa.Porem, para que o exemplo fique correto, editei o artigo para que você possa testar o exemplo.Qualquer problema, me mande uma mensagem e faço a correção.

Abraço e bom estudo!

Fabiano Muniz disse:25 de novembro de 2011 às 10:57

Bom dia Raphael, estou tentando implementar a funcionalidade proposta em seu arquivo mas não entendi esse trecho do seu código, queé clientes.SegurancaClientesValue??

Clientes clientes = new Clientes();clientes.SegurancaClientesValue = Credencial;

Obrigado,

Raphael Cardoso disse:25 de novembro de 2011 às 23:04

Essa Clientes é o WebService. A propriedade SegurancaClientesValue é onde irei passar a Credencial que foi instanciada previamente.Ela foi criada por conta do SoapHeader que definimos no WebService

Deixe um Comentário

Nome (obrigatório)

Email (não será publicado) (obrigatório)

Site

Enviar comentário

Qual a soma da expressão:

2 + 1

Notifique-me dos comentários por e-mail

C# Brasil - (CC) Alguns direitos reservados. O conteúdo deste site está sob a licença de Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 BrasilPermissões e/ou restrições além do escopo desta licença podem ser vistas e/ou requeridas. Nenhum conteúdo deste site pode ser copiado e reproduzido em outro site sem autorização do

autor!

Page 5: Criando Um Web Service Seguro Com SoapHeader _ C# Brasil

05/06/12 Criando um Web Service seguro com SoapHeader | C# Brasil

5/5csharpbrasil.com.br/csharp/criando-um-web-service-seguro-com-soapheader/

© 2007-2012. Todos os direitos reservados.Desenvolvido por Raphael Cardoso