L'API Geolocation a été supprimée des origines non sécurisées dans Chrome 50

Paul Kinlan
Paul Kinlan

Chrome a l'intention publique d'abandonner des fonctionnalités puissantes telles que la géolocalisation sur des origines non sécurisées, et nous espérons que d'autres suivront.

À partir de Chrome 50, il n'est plus possible d'obtenir la position de l'utilisateur à l'aide de l'API HTML5 Geolocation à partir de pages diffusées via des connexions non sécurisées. Cela signifie que la page qui effectue l'appel de l'API Geolocation doit être diffusée à partir d'un contexte sécurisé tel que HTTPS.

Il s'agit d'un problème important, car il a un impact direct sur tous les sites qui nécessitent l'utilisation de l'API de géolocalisation et ne sont pas diffusés via HTTPS. Toutefois, nous pensons qu'il s'agit d'un changement bénéfique pour tous les internautes. Ce post devrait vous aider à comprendre le raisonnement et la façon de procéder.

Quand ce changement aura-t-il lieu ?

Ce changement entre en vigueur à compter de la version 50 de Chrome (20 avril 2016 à minuit PST).

La console des outils pour les développeurs de Chrome génère des avertissements depuis la version 44 (publiée le 21 juillet 2015).
Plusieurs annonces publiques nous ont permis de décrire les raisons de ce changement:

Plusieurs autres sources ont mis en avant ce point : Mobiforge (26 janvier 2016), Wired (17 mars 2016) et VentureBeat (13 avril 2016).

Pourquoi apportons-nous cette modification ?

La localisation est une donnée sensible. Exiger le protocole HTTPS est obligatoire pour protéger la confidentialité des données de localisation de vos utilisateurs. Si la position de l'utilisateur est disponible à partir d'un contexte non sécurisé, les pirates informatiques sur le réseau pourront savoir où cet utilisateur se trouve, ce qui compromet fortement la confidentialité des utilisateurs.

Qui est concerné ?

Ce problème affecte toutes les pages qui utilisent actuellement l'API Geolocation à partir de pages diffusées via HTTP (non sécurisées). Cela concerne aussi les iFrames HTTPS qui utilisent l'API Geolocation s'ils sont intégrés dans des pages HTTP. (Vous ne pourrez pas polyfill à l'aide d'un frame HTTPS partagé).

L'ensemble de mon application Web a-t-il besoin du protocole HTTPS ?

Il n'est pas obligatoire de diffuser l'ensemble de l'application via HTTPS pour utiliser la géolocalisation. Seules les pages utilisant la géolocalisation doivent être diffusées dans un contexte sécurisé. Actuellement, un contexte sécurisé désigne tout élément hébergé à un niveau supérieur sur HTTPS ou localhost. Par exemple, un iFrame qui pointe vers une origine sécurisée, mais qui est hébergé sur une origine non sécurisée (http ://paul.kinlan.me/) ne sera pas autorisé à appeler l'API de géolocalisation.

Nous vous recommandons vivement de migrer vers le protocole HTTPS, car les fonctionnalités de navigateur nouvelles et existantes nécessitent des origines sécurisées.

Cela a-t-il une incidence sur le développement local ?

Cela ne devrait pas être le cas, car localhost a été déclaré comme "potentiellement sécurisé" dans la spécification et, dans notre cas, les requêtes de géolocalisation diffusées au premier niveau sur localhost continueront de fonctionner.

Puis-je détecter au moment de l'exécution si la géolocalisation a été bloquée parce que le contexte n'est pas sécurisé.

Oui. La spécification de géolocalisation définit un objet PositionError qui est transmis au rappel d'échec des API Geolocation. L'objet définit les propriétés code et message.

Les erreurs dues à ce problème de contexte sécurisé renverront un code de 1 qui est une erreur "Permission Denied Error". Cette erreur peut se produire si un utilisateur a refusé l'accès ou si le système a refusé l'accès aux établissements de l'utilisateur. Vous devrez donc consulter le message pour connaître la raison exacte.

Cette méthode peut être fragile, car elle pourrait changer à l'avenir, mais un signal fort qu'il s'agit d'un problème de contenu non sécurisé consiste à rechercher la chaîne "Seules les origines sécurisées sont autorisées".

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

N'oubliez pas que vous ne pouvez pas vous contenter de vérifier l'origine de la page, car celle-ci peut être sur HTTPS, mais à l'intérieur d'un iFrame hébergé dans un contexte non sécurisé.

J'ai vraiment besoin d'utiliser la géolocalisation. Que dois-je faire ?

Si vous souhaitez utiliser l'API Geolocation HTML5 ou si votre site l'utilise déjà, veuillez migrer les pages effectuant des appels de l'API Geolocation vers HTTPS, en vous assurant qu'elles sont utilisées dans un contexte sécurisé.

Il existe un certain nombre d'options de remplacement disponibles pour obtenir la position d'un utilisateur qui ne sont pas affectées par ce changement, telles que l'API Google Maps Geolocation, GeoIP (par exemple, il existe d'autres solutions géographiques) et un code postal saisi par l'utilisateur. Toutefois, nous vous recommandons vivement de passer au protocole HTTPS pour garantir un accès continu à la géolocalisation.