lunes, 13 de abril de 2009

Seguridad de usuario y password de un web service(soap header)

Muchas personas quiere validar su web service con usuario y password pero no lo quieren pasar como parte de los parametros o quieren sea mas seguro, la forma correcto de enviar el usuario y el password podria ser atravez del soap header, como saben los web service se comunican atravez de soap el cual esta dividido por header y body, en el body viaja todo lo del web service, mientras que el header no viaja nada y todo lo que esta alli esta encriptado.
Aca les dejo un ejemplo de como se utiliza. para mas información lean el libro 2524.

lo primero que tiene que hacer es crear una clase la cual usaran para almacenar usuario y el password esta clase sera serializada, ejemplo lo pueden poner en el mismo web service justo cuando termina la clase del web service.
Public Class AuthInscripcion
Inherits SoapHeader
Public usuario As String
Public password As String
End Class
luego en su web method tiene que mandarla a llamar con un SoapHeader("authinfo") ejemplo completo:
Public Function CarrerasCarnet(ByVal Carne As String) As DataSet
luego de esta definir el soap header vamos a validar tiene que poner el siguiente codigo justo debajo de la definicion de su webmoethod, esto lo que hacer es que si el usuario o password esta mal no hace el llamado, les dara un error por que hay crear la funcion.

If validaSeguridad() = False Then
Exit Function
End If

ahora en la misma clase del web service pueden hacer una funcion de validacion del usuario
Private Function validaSeguridad() As Boolean
Dim access As Boolean = False
If authinfo Is Nothing Then
Throw New Exception("Ingrese usuario o password")
Else
If authinfo.usuario.ToUpper = "usuario1" Then
If authinfo.password.ToUpper = "123" Then
access = True
Else
access = False
Throw New Exception("password no valido")
End If
If access = False Then
Throw New Exception("password no valido")
End If
End If
Si llegaro a esta estapa les cuento que sus web services son inacesibles ahorita =) ahora tienen que configurar a su cliente con el siquiente codigo, para que no digan que solo vb ahora usare c#

localhost winc = new localhost ();
localhost .AuthInscripcion myheader = new localhost .AuthInscripcion);
myheader.usuario = Session["usuariowebservice"].ToString();
myheader.password = Session["passwordwebservice"].ToString);
winc.AuthInscripcionValue = myheader;
ds = winc.CarrerasCarnet(txtcarnet.Text);
espero les sirva. Esta un poco complejo pero no imposible.

1 comentario:

Anónimo dijo...

Disculpa y esto funciona si quisiera llamar un webservice de excel 2007 y me quisiera autenticar?