Cross domain policy files
Tuesday, May 12th, 2009Ayer en la charla del Kit cuando comentaba la restricción que pone Silverlight a la hora de consultar servicios externos al dominio donde está alojado nuestra aplicación, surgieron muchas dudas acerca de si este era realmente el funcionamiento. Con este artículo pretendo dejar claro el funcionamiento de este mecanismo.
Todo esto viene de Flash, creadores de los ficheros crossdomain.xml, ficheros que especifican si un servicio o recurso es accesible o no por clientes que provienen de otros dominios. Este fichero debe estar en la raíz del dominio donde están alojados los servicios o recursos. La estructura de este fichero se puede consultar aquí: Cross-domain policy file specification
Silverlight hace uso de este tipo de ficheros de la misma forma que Flash, además que incluye también un nuevo tipo de fichero clientaccesspolicy.xml. Silverlight primero tratará de descargar este fichero y si no existe, tratará de descargar crossdomain.xml.
¿Qué ocurre con servicios que no son nuestros?
Es es la primera pregunta que nos puede surgir. Si yo quiero conectarme a los servicios web de Google, Flickr o Twitter, ¿les tengo que decir que me pongan ese fichero? Lo cierto es que todos los grandes servicios tienen ya este fichero configurado para acceso de forma general.
- http://api.google.com/crossdomain.xml
- http://api.flickr.com/crossdomain.xml
- http://www.twitter.com/crossdomain.xml
- http://www.amazon.com/crossdomain.xml
- http://www.youtube.com/crossdomain.xml
¿Y cuando no existe y no puedo hacer que lo ponga?
Para este caso existen alternativas.
Una de ellas sería hacer uso de la API de integración con el navegador para acceder al objeto JavaScript XMLHttpRequest y consultar a través de él el servicio en cuestión. XMLHttpRequest no hace esta comprobación de ninguno de estos ficheros Xml, aunque podríamos tener problemas con otras características de seguridad que implementen los navegadores para evitar XSS.
Otra alternativa es hacer que nuestro servidor nos haga de Proxy con el servicio o recurso del otro dominio. El problema de esta solución es la posible sobrecarga de nuestro servidor.
+Info