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

Chrome a l'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, Chrome n'est plus compatible avec l'obtention de la position de l'utilisateur à l'aide de l'API HTML5 Geolocation à partir de pages diffusées par des connexions non sécurisées. Cela signifie que la page qui appelle 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 aura 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. Toutefois, nous pensons que ce changement sera bénéfique pour tous les utilisateurs du Web. Cet article devrait vous aider à comprendre le raisonnement et la marche à suivre.

Quand ce changement aura-t-il lieu ?

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

La console des outils pour les développeurs de Chrome émet des avertissements depuis la version 44 (publiée le 21 juillet 2015).
Nous avons publié plusieurs annonces publiques expliquant la raison (et la discussion) pour laquelle nous apportons ce changement:

D'autres sources l'ont également souligné : Mobiforge (26 janvier 2016), Wired (17 mars 2016) et VentureBeat (13 avril 2016).

Pourquoi apportons-nous cette modification ?

L'emplacement est une donnée sensible. L'exigence du protocole HTTPS est nécessaire 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ù se trouve cet utilisateur. Cela compromet sérieusement la confidentialité des utilisateurs.

Qui est concerné ?

Cela affecte toutes les pages qui utilisent actuellement l'API Geolocation à partir de pages diffusées via HTTP (non sécurisé). Il affecte également les iFrames HTTPS qui utilisent l'API Geolocation si elles sont intégrées à des pages HTTP. (Vous ne pourrez pas effectuer de polyfill à l'aide d'un frame partagé diffusé en HTTPS.)

Mon application Web entière a-t-elle besoin de HTTPS ?

Il n'est pas nécessaire que l'ensemble de l'application soit diffusé 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 élément hébergé au 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 peut pas appeler l'API de géolocalisation.

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

Cela a-t-il un impact sur le développement local ?

Cela ne devrait pas être le cas. localhost a été déclaré comme "potentiellement sécurisé" dans la spécification. Dans notre cas, les requêtes de géolocalisation exécutées au niveau supérieur 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 ne se trouvait pas dans un contexte 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 des propriétés code et message.

Les erreurs dues à ce problème de contexte sécurisé renvoient une valeur code de 1, qui correspond à une erreur "Autorisation refusée". Cette erreur peut s'afficher lorsqu'un utilisateur a refusé l'accès ou que le système a refusé l'accès aux emplacements de l'utilisateur. Vous devrez donc consulter le message pour connaître la raison exacte.

Cela peut être très fragile, car cela peut changer à l'avenir, mais un signal fort indiquant qu'il s'agissait d'un problème de contenu non sécurisé consiste à rechercher la chaîne "Only secure origins are allowed" (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é à partir d'un contexte non sécurisé.

Je dois vraiment utiliser la géolocalisation. Que dois-je faire ?

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

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