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

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

À partir de Chrome 50, il ne sera plus possible d'obtenir la position de l'utilisateur à l'aide de l'API HTML5 Geolocation à partir de pages fournies par 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 qui ne sont pas diffusés via HTTPS. Cependant, nous estimons qu'il s'agit d'un changement qui, selon nous, est bénéfique pour tous les internautes. Cet article devrait vous aider à comprendre le raisonnement et la façon de procéder.

Quand ce changement aura-t-il lieu ?

Cette modification est effective depuis Chrome 50 (le 20 avril 2016 à 12h PST).

La console des outils pour les développeurs Chrome affiche des avertissements depuis la version 44 (publiée le 21 juillet 2015).
De nombreuses annonces publiques décrivent les raisons pour lesquelles nous avons apporté ce changement (ainsi que des discussions à ce sujet) :

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

Pourquoi apportons-nous cette modification ?

La position est une donnée sensible 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 dans un contexte non sécurisé, les pirates informatiques sur le réseau pourront l'identifier, ce qui compromet sérieusement la confidentialité des données des utilisateurs.

Qui est concerné ?

Cela concerne toutes les pages qui utilisent actuellement l'API Geolocation à partir des pages diffusées via HTTP (non sécurisées). Elle affecte également les iFrames HTTPS utilisant l'API Geolocation s'ils sont intégrés à des pages HTTP. (Vous ne pourrez pas polyfill à l'aide d'une trame HTTPS diffusée via HTTPS.)

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

Il n'est pas nécessaire que l'ensemble de l'application soit diffusée via HTTPS pour utiliser la géolocalisation. Seules les pages qui utilisent la géolocalisation doivent être diffusées dans un contexte sécurisé. Un contexte sécurisé correspond actuellement à tout ce qui est hébergé au premier niveau 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 puissantes fonctionnalités des navigateurs, nouvelles et existantes, nécessitent des origines sécurisées.

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

Ce n'est pas le cas, car localhost a été déclaré comme "potentiellement sécurisé" dans la spécification. Dans notre cas, les requêtes de géolocalisation transmises au premier niveau via localhost continueront de fonctionner.

Puis-je détecter au moment de l'exécution si la géolocalisation a été bloquée parce qu'elle n'était pas dans un contexte sécurisé ?

Oui. La spécification de géolocalisation définit un objet PositionError 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 une code de 1, ce qui indique une erreur d'autorisation refusée. Cette erreur peut se produire lorsqu'un utilisateur refuse l'accès ou que le système refuse l'accès aux emplacements de l'utilisateur. Vous devez donc consulter le message pour en connaître la raison exacte.

Cette méthode peut être fragile, car elle est susceptible de changer à l'avenir, mais elle indique clairement qu'il s'agit d'un problème de contenu non sécurisé : recherchez 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 simplement vérifier l'origine de la page, car elle peut se trouver sur HTTPS, mais dans 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 utilise déjà l'API Geolocation, veuillez migrer les pages effectuant des appels de l'API Geolocation vers HTTPS, en veillant à ce qu'elles soient utilisées dans un contexte sécurisé.

Plusieurs options de remplacement disponibles pour obtenir la position d'un utilisateur ne sont pas affectées par cette modification, telles que l'API Google Maps Geolocation, GeoIP (par exemple, il existe d'autres solutions basées sur la géolocalisation) 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.