Foros del Web » Programando para Internet » ASPX (.net) »

Añadir cabecera de autorización SOAP a la petición de servicio web

Estas en el tema de Añadir cabecera de autorización SOAP a la petición de servicio web en el foro de ASPX (.net) en Foros del Web. Buenos días. Me encuentro intentando conectar a un WebService que no he hecho yo, y que no puedo modificar. La cuestión es que en la ...
  #1 (permalink)  
Antiguo 06/06/2011, 04:39
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Añadir cabecera de autorización SOAP a la petición de servicio web

Buenos días.
Me encuentro intentando conectar a un WebService que no he hecho yo, y que no puedo modificar.
La cuestión es que en la llamada tengo que pasarle unas credenciales, y para ello debo hacerlo añadiendo una cabecera de autorización a la petición web, cosa que no sé cómo hacer, teniendo acceso unicamente a la parte de cliente.
El código que tengo actualmente es el siguiente:
Código VB.NET:
Ver original
  1. Dim misDetallesServicio As New DigitalBooksService.solicitudCatalogoCompleto
  2. misDetallesServicio.retailer_id = DigitalBooksID
  3. Dim miServicio As New DigitalBooksService.DBSOAPMethods
  4. miServicio.solicitudCatalogoCompleto(misDetallesServicio)
Alguien sabría decirme cómo "añadir una cabacera de autorización a la petición web"?
Gracias por sus comentarios.
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 07/06/2011, 08:21
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

miServicio no tiene una propiedad que sea AuthenticationHeader o de nombre similar??
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 08/06/2011, 08:06
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Hola Pedro, gracias por responder a mi consulta.
Verás, sería perfecto si el objeto dispone de una propiedad así, pero no la tiene.
Creo que el problema es que me estoy conectando a un Web Service que no está desarrollado en .NET , y el servicio no expone nada parecido a una Header, para poder asignarle las credenciales.
Lo que tengo que hacer es enviar las credenciales HTTP para autenticación básica, pero no sé cómo hacerlo correctamente.
Concretamente, la respuesta que me dan es que tengo que "añadir una cabecera de autorización a la petición web". Pero desconozco la forma correcta de realizar esa petición.
Mira, este es el wsdl del servicio: http://www.aglutinaeditores.com/wsdl
Agradezco cualquier cosa que veas que me puede ayudar.
Saludos.

Este es un código PHP que me enviaron, para hacer lo mismo que tengo que hacer, pero en PHP:
Código PHP:
$client = new SoapClient('http://www.aglutinaeditores.com/wsdl', array(
    
'trace' => true,
    
'login' => 'usuario',
    
'password' => 'contraseña'
  
));
 
  
$params = new stdClass;
  
$params->retailer_id 'libreria';
 
  
$result $client->solicitudCatalogoCompleto($params); 
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 08/06/2011, 09:22
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Estoy intentando realizar una conexión a través de "Service Reference" en lugar de "Web Reference". Aparentemente parece que lleva más opciones para realizar distintos tipos de conexión.
He probado con esta configuración:
Código XML:
Ver original
  1. <security mode="TransportCredentialOnly">
  2.   <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
  3.   <message clientCredentialType="UserName" algorithmSuite="Default" />
  4. </security>
Pero al ejecutar el código me devuelve el siguiente error:
Cita:
La solicitud HTTP no está autorizada con el esquema de autenticación de cliente 'Basic'. El encabezado de autenticación recibido del servidor era ''.
Error en el servidor remoto: (401) No autorizado.
¿Alguien puede ayudarme a descifrar este mensaje?
Muchas gracias por vuestra ayuda.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 08/06/2011 a las 09:35
  #5 (permalink)  
Antiguo 08/06/2011, 20:39
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

dale una vuelta a esto

http://msdn.microsoft.com/en-us/library/aa529264.aspx
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #6 (permalink)  
Antiguo 09/06/2011, 05:11
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Hola Pedro.
El enlace que me facilitas, me ofrece unos pasos, el primero de los cuales es "To create a custom policy assertion that secures a SOAP message exchange", que para hacerlo me enlaza con otra página.
Esa página es bastante larga e implementa un montón de código...
¿De verdad hay que programar tooodo eso para consumir un Servicio con autenticación HTTP Básica? No es que me de pereza (que un poco si) si realmente es lo que necesito.
Pero es que tengo muchas dudas de que tenga que enredarme tanto para una simple llamada autenticada a un Web Service.
¿Sabes cual es el problema principalmente?
¿No se puede enviar la autenticación junto con la llamada al WebService, sin tener que realizar semejante implementación de código?
También hay algo que no tengo claro. Se supone que no es lo mismo:
- Enviar las credenciales en la petición HTTP para autenticación básica
que
- Enviar las credenciales en la cabecera SOAP
Por lo que me dicen la gente del servicio web, no es necesario realizar SOAP Headers, simplemente hay que facilitar el username y password en la llamada HTTP.
Si me podéis aclarar un poco este "fregao" os estaría muy agradecido.
Importante (creo): EL SERVICIO NO ES .NET
Gracias por todo.
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 09/06/2011 a las 05:16
  #7 (permalink)  
Antiguo 16/06/2011, 04:48
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Hola chicos.
Finalmente lo resolví. Efectivamente no se trataba de algo extenso si no más bien de saber qué hacer.
Una vez aclarado el tema con la gente del servicio, resulta que las credenciales debían viajar en la petición HTTP, y no en la petición SOAP que va dentro de la petición HTTP.
Por lo tanto la AUTH_HEADER (o cabecera de autenticación) debía ser una cabecera HTTP, y no una cabecera SOAP.
Y sin más, a continuación les dejo cómo construir una cabecera de autenticación HTTP, con autenticación básica:

Primero aclarar que con agregar "Referencia Web" sería suficiente. Imagino que habrá la forma de hacerlo por "Referencia de Servicio", pero no me he querido pelear más con esto.
Entonces, primero construímos una clase que herede de la clase proxy del servicio.
Código VB.NET:
Ver original
  1. Public Class ServicioPruebaHeredado : Inherits ServicioPrueba.DBSOAPMethods
  2.  
  3.     Protected Overrides Function GetWebRequest(ByVal uri As Uri) As System.Net.WebRequest
  4.         Dim webRequest As System.Net.HttpWebRequest = DirectCast(MyBase.GetWebRequest(uri), System.Net.HttpWebRequest)
  5.         Credentials = New Net.NetworkCredential("UserName", "Password")
  6.         PreAuthenticate = True
  7.         Dim misCredenciales As System.Net.NetworkCredential = TryCast(Credentials, System.Net.NetworkCredential)
  8.         If Not misCredenciales Is Nothing Then
  9.             Dim authInfo As String = ((If((misCredenciales.Domain IsNot Nothing) AndAlso (misCredenciales.Domain.Length > 0), misCredenciales.Domain + "\", String.Empty)) + misCredenciales.UserName & ":") + misCredenciales.Password
  10.             authInfo = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(authInfo))
  11.             webRequest.Headers("Authorization") = "Basic " & authInfo
  12.         End If
  13.         Return webRequest
  14.     End Function
  15.  
  16. End Class
OK, esta era la parte difícil
Ahora simplemente se trata de invocar a esta clase, en vez de a la clase proxy original, y trabajar como siempre, llamando a sus funciones y métodos.
Lo que conseguimos a través de la clase heredada, es que se le añada, a cada petición, una cabecera de autenticación con las credenciales.

Espero que le sirva a alguien.
Saludos.
__________________
..:: moNTeZIon ::..
  #8 (permalink)  
Antiguo 03/08/2012, 05:01
pcv
 
Fecha de Ingreso: agosto-2012
Mensajes: 1
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Hola:

Por si le sirve a alguien, moNTeZIon especialmente, he conseguido hacer funcionar mi servicio web (Referencia Web) sin necesidad de implementar GetWebRequest. Como indica moNTeZIon he configurado el elemento security de app.config de la siguiente manera:

Código XML:
Ver original
  1. <security mode="TransportCredentialOnly">
  2.   <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
  3.   <message clientCredentialType="UserName" algorithmSuite="Default" />
  4. </security>

A continuación, en el código, al crear el cliente configuro las credenciales:

Código C#:
Ver original
  1. client = new LoQueSeaClient();
  2. client.ClientCredentials.UserName.UserName = "UserName";
  3. client.ClientCredentials.UserName.Password = "MyPassword";
  #9 (permalink)  
Antiguo 18/10/2012, 09:04
Avatar de NetFcruz  
Fecha de Ingreso: agosto-2012
Ubicación: Reynosa
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Oye amigo tmabien busco la informacion que sigue, necesito enviar un xml a un werbservice, en modo string text/xml, pero no se como iniciar mi conexion, creo una variable como pertenecinete al namespace de su url pero de ahi no se como definir una funcion y enviar el xml desde vb.net, solo pregunto por si lo hicieron darme una idea.
Lastima que en este foro, tarden en responder. Ojala sea pronto.
Saludos...
__________________
!El conocimiento se LIMITA cuando dices NO PUEDO!

By NetFcruz
  #10 (permalink)  
Antiguo 04/01/2015, 09:04
 
Fecha de Ingreso: enero-2015
Mensajes: 1
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Añadir cabecera de autorización SOAP a la petición de servicio web

Pero esto solo funciona bajo protocolos https no? que pasa si mi wsdl es http


Cita:
Iniciado por pcv Ver Mensaje
Hola:

Por si le sirve a alguien, moNTeZIon especialmente, he conseguido hacer funcionar mi servicio web (Referencia Web) sin necesidad de implementar GetWebRequest. Como indica moNTeZIon he configurado el elemento security de app.config de la siguiente manera:

Código XML:
Ver original
  1. <security mode="TransportCredentialOnly">
  2.   <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
  3.   <message clientCredentialType="UserName" algorithmSuite="Default" />
  4. </security>

A continuación, en el código, al crear el cliente configuro las credenciales:

Código C#:
Ver original
  1. client = new LoQueSeaClient();
  2. client.ClientCredentials.UserName.UserName = "UserName";
  3. client.ClientCredentials.UserName.Password = "MyPassword";

Etiquetas: autorización, servicio, soap, aspx, cabeceras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.