Consumir servicios desde otro dominio

52 views
Skip to first unread message

Dario Seminara

unread,
May 8, 2014, 11:42:25 AM5/8/14
to javascr...@googlegroups.com
Se ve que este es un tema muy frecuente y queria plantearlo aca

Les copypasteo una pregunta de la lista de rubysur

"
Una pregunta de javascript.

Estamos haciendo una aplicación con varios webservices internos.

¿Desde el browser puedo llamar a un webservice de otro subdominio?¿O siempre tengo que hacer "proxy" en mi subdominio?

Actualmente yo hago los llamados del cliente al servidor de la propia aplicación, y desde la aplicación rails hago las llamadas a los webservices que están en otros subdominios. La otra opción si es posible sería más eficiente.

Saludos!

---
Dwayne
"

La primer respuesta que hay a esto es CORS, pero todavia quedan algunos detalles, como por ej si la autenticacion implica Cookies, a varios browsers no les gusta (yo estoy probando con la ultima version de Chrome) el enviar cookies a diferentes dominios, aunque si te deja setear los otros headers

La solucion fue agregar estos headers:
Access-Control-Allow-Origin: <el domain a donde se hostea la pagina>
Access-Control-Allow-Credentials: true

Ese ultimo header, se supone, hace que el browser reenvie las credentials (Cookie) tambien en los requests cross-domain, pero no funciona :(
Si no fuera por la cookie, todo lo demas anda, me esta faltando agregar algo. o la autenticacion cross-domain con cookie es inviable?

Demián Andrés Rodriguez

unread,
May 8, 2014, 11:49:14 AM5/8/14
to javascr...@googlegroups.com
Si es una llamada por GET por qué no usa JSONP?


--
Has recibido este mensaje porque estás suscrito al grupo "Javascript Argentina" 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 javascript-ar...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a javascr...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/javascript-arg/1daf0a1c-bd19-4559-8014-d881969029e9%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Angel Java Lopez

unread,
May 8, 2014, 11:56:02 AM5/8/14
to javascr...@googlegroups.com
Lo de "la solucion fue agregar headers", donde fue? agregar en el servidor, supongo, en la respuesta del servidor.

No estoy seguro que "Ese ultimo header, se supone, hace que el browser reenvie las credentials (Cookie) tambien en los requests cross-domain, pero no funciona "

Segun


hay que hacer algo DEL LADO CLIENTE:

var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/';
    
function callOtherDomain(){
  if(invocation) {
    invocation.open('GET', url, true);
    invocation.withCredentials = true;
    invocation.onreadystatechange = handler;
    invocation.send(); 
  }

Y entonces, vean ahi en ese enlace, la respuesta/intercambio esperado. EL SERVIDOR tiene que enviar el header que mencionaron

y dice

Although line 11 contains the Cookie destined for the content on http://bar.other, if bar.other did not respond with an Access-Control-Allow-Credentials: true (line 19) the response would be ignored and not made available to web content.  Important note: when responding to a credentialed request,  server must specify a domain, and cannot use wild carding.  The above example would fail if the header was wildcarded as: Access-Control-Allow-Origin: *.  Since the Access-Control-Allow-Origin explicitly mentions http://foo.example, the credential-cognizant content is returned to the invoking web content.  Note that in line 22, a further cookie is set.


Es asi?

Me gusta ese enlace, porque muestra en detalle varios puntos. Otros post son mas ambiguos, o sin contexto, como "agregar el header", pero sin explicar en concreto: que hace o deja de hacer eso, y si es que hay que agregarlo en el cliente, en el servidor, o en enano de jardin que hay en el fondo ;-)

Angel "Java" Lopez
@ajlopez

Dario Seminara

unread,
May 8, 2014, 2:33:58 PM5/8/14
to javascr...@googlegroups.com
Si, tal cual los headers los manda el server

Estaba viendo si podia usar jsonp, pero aparentemente no me deja controlar los headers, ademas si jsonp solo anda con GET, en principio no es lo q necesito, porque tambien tengo que hacer POSTs, ya intente lo de withCredentials incluyendo lo de Access-Control-Allow-Credentials: true y demas pero nada :(, talvez sea mejor ver la manera de q el server no autentique basado en cookies, BTW los servicios REST no suelen usar cookies (?!?!)

Demián Andrés Rodriguez

unread,
May 8, 2014, 2:35:47 PM5/8/14
to javascr...@googlegroups.com

Oauth, tokens...

Reply all
Reply to author
Forward
0 new messages