Se quitó la API de Geolocation de orígenes no seguros en Chrome 50

Paul Kinlan
Paul Kinlan

Chrome tiene la intención pública de dar de baja funciones potentes, como la ubicación geográfica en orígenes no seguros, y esperamos que otros sigan.

A partir de Chrome 50, Chrome ya no admite obtener la ubicación del usuario mediante la API de Geolocation de HTML5 a partir de páginas publicadas por conexiones no seguras. Esto significa que la página que realiza la llamada a la API de Geolocation debe entregarse desde un contexto seguro, como HTTPS.

Es un problema importante, ya que afectará directamente a los sitios que requieran el uso de la API de ubicación geográfica y que no se publiquen a través de HTTPS. Sin embargo, es un cambio que creemos que beneficiará a todos los usuarios de la Web. Esta entrada te ayudará a entender el razonamiento y cómo proceder.

¿Cuándo ocurrirá el cambio?

Este cambio entrará en vigencia a partir de Chrome 50 (12 p.m. PST del 20 de abril de 2016).

La consola de herramientas para desarrolladores de Chrome envía advertencias desde la versión 44 (lanzada el 21 de julio de 2015).
Se realizaron varios anuncios públicos en los que se describe el motivo (y el debate) de este cambio:

Hay varias otras fuentes que destacaron esto: Mobiforge (26 de enero de 2016), Wired (17 de marzo de 2016), VentureBeat (13 de abril de 2016).

¿A qué se debe este cambio?

La ubicación es un dato sensible. Para proteger la privacidad de los datos de ubicación de los usuarios, es obligatorio solicitar HTTPS. Si la ubicación del usuario está disponible en un contexto no seguro, los atacantes de la red podrán saber dónde se encuentra el usuario. Esto pone en riesgo la privacidad del usuario.

¿A quién afecta esto?

Esto afecta a todas las páginas que actualmente usan la API de Geolocation para las páginas que se publican a través de HTTP (no segura). También afecta los iframes HTTPS que usan la API de Geolocation si están incorporados en páginas HTTP. (No podrás polyfill con un marco compartido publicado mediante HTTPS).

¿Toda mi app web necesita HTTPS?

No es un requisito que toda la app se entregue a través de HTTPS para usar la ubicación geográfica. Solo las páginas que usan la ubicación geográfica deben entregarse en un contexto seguro. En la actualidad, un contexto seguro es todo lo que esté alojado en el nivel superior de HTTPS o localhost. Por ejemplo, un iframe que apunta a un origen seguro, pero que se aloja en un origen no seguro (http ://paul.kinlan.me/) no podrá llamar a la API de ubicación geográfica.

Te recomendamos que migres a HTTPS, ya que las potentes funciones nuevas y existentes del navegador requieren orígenes seguros.

¿Esto afecta el desarrollo local?

No debería hacerlo, ya que localhost se declaró como "potencialmente seguro" en la especificación y, en nuestro caso, las solicitudes de ubicación geográfica que se entregan en el nivel superior en lugar de localhost seguirán funcionando.

¿Puedo detectar durante el tiempo de ejecución si la ubicación geográfica se bloqueó por no estar en un contexto seguro?

Sí. La especificación de ubicación geográfica define un objeto PositionError que se pasa a la devolución de llamada con errores de las API de ubicación geográfica. El objeto define propiedades de code y message.

Los errores debido a este problema de contexto seguro mostrarán una code de 1, que es un "Error de permiso denegado". Puedes recibir este error cuando un usuario haya denegado el acceso o el sistema rechazó el acceso a las ubicaciones del usuario. Esto significa que deberás revisar el mensaje para ver cuál fue el motivo exacto.

Esto puede ser bastante frágil, ya que podría cambiar en el futuro, pero un indicador claro de que se trataba de un problema de contenido no seguro es buscar la cadena "Solo se permiten orígenes seguros".

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

Recuerda que no puedes comprobar el origen de la página, ya que esta podría estar en https, sino dentro de un iframe alojado en un contexto no seguro.

Realmente necesito usar Geolocation; ¿qué debo hacer?

Si deseas usar la API de Geolocation de HTML5, o si tu sitio ya la utiliza, migra a HTTPS las páginas que realizan llamadas a la API de Geolocation y asegúrate de que se utilicen en un contexto seguro.

Hay una serie de opciones de resguardo disponibles para obtener la ubicación de un usuario que no se ve afectada por este cambio, como la API de Google Maps Geolocation, GeoIP (por ejemplo, existen otras soluciones basadas en la ubicación geográfica) y un código postal ingresado por el usuario. Sin embargo, recomendamos que la mejor ruta para garantizar el acceso continuo a la ubicación geográfica sea cambiar a HTTPS.