Buenas grupo,
tenemos un problema con el que tal vez algunos tenéis experiencia, o podéis echarnos un cable:
- Tenemos un WebLogic, con unos servicios web muy elegantes. (Dominio A)
- Tenemos un OSB (Oracle Service Bus), que hace de una “especie” de proxy (Dominio B)
- Tenemos CRM (Dominio c)
- Tenemos a jquery
- Tenemos de todo…. Pero nos falta el Cholo Simeone… :_(
Olvidándonos un poco de que estamos utilizando CRM, al final
tenemos una web, que hace llamadas a servicios web del WebLogic vía jQuery,
esta web está en un Dominio C, y hace una llamada al webLogic Dominio
A (Como el WebLogic está configurado para recibir peticiones desde el dominio
C y otros, cuando llamamos directamente de C a A, el servicio
responde perfectamente… (ole ole ole, cholo simeone)
Pero qué ocurre cuando no podemos llamar al WebLogic, sino que tenemos que
pasar por un OSB de oracle (Dominio B), y por tanto hacemos Dominio
C-> Dominio B-> Dominio A ¿?, pues que no se encuentra el encabezado
de la petición que realizamos desde la web en el OSB… y pese a que hemos
chekeado que nos devuelve datos (es decir la petición llega y responde), es el
propio navegador el que cierra la conexión, por la seguridad que hay entre
dominios.
Para salvar esto, hay algunos trucos interesantes, y uno de
ellos es utilizar JsonP en lugar de Json, esto lo que hace
básicamente es aprovechar un “hack” del navegador, para incrustar a modo de
script toda la respuesta del servicio web vía callback (como si fuera una
función nueva de js con todos los dtaos del json incluidos).
Hemos conseguido, poder hacer ese hack y saltarnos el CORS, pudiendo acceder a
los datos del servicio web, pese a que estemos entre dominios… pero por
supuesto explorer, tiene lago que decir, y es que no acepta y no se traga bien
el formato del json devuelto (pese a que es válido).
En fin… resumiendo… alguien ha conseguido saltarse CORS vía Ajax o cualquier tipo de petición XHR ¿?
- Que conste que el OSB tiene habilitadas todas las conexiones vía headers y domain security, para que no exista CORS (por lo que no debería hacer falta hacer el hack).
- Y que conste que no podemos usar proxys propios…. (No nos dejaron valeeee :DD).
Muchas gracias de antemano.
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Hola Kikenet,
Encuentro extraño que el navegador cliente no respete los encabezados qué autorizan el CORS. Yo partiría validando nuevamente qué los encabezados http CORS están efectivamente llegando al cliente de manera adecuada, ya que si el navegador corta la conexión luego de recibir el encabezado, me da la espina de que por ahí está el asunto. Luego vendría validar que si el tráfico es por https el certificado este válido y todo eso,o que el navegador no tenga un requerimiento particular sobre CORS (como requerir https)
Cómo saltarse el CORS o la seguridad existente al hacer peticiones desde cliente entre distintos dominios. (para todos los exploradores, por lo menos hasta que saquen algún fix nuevo y chapen el bujero):
Script:
var URL = "http://serversupersecurizado:666/TestJson.json
(function($) {
var url = URL + '?callback=?';
$.ajax({
type: 'GET',
url: url,
async: false,
jsonpCallback: 'choloPutoAmoCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.dir(json.poblaciones); //En nuestro caso es un listado de poblaciones […]
},
error: function(e) {
console.log(e.message);
}
});
})(jQuery);
jsonWrapper callback function:
choloPutoAmoCallback(
{
"poblaciones" : [ {
"codPostal" : "666",
"codigo" : "666",
"nombre" : "XXX",
"provincia" : "XXX"
} ],
});