API de geolocalização removida de origens não seguras no Chrome 50

Paul Kinlan
Paul Kinlan

O Chrome tem a intenção pública de suspender o uso de recursos avançados, como a geolocalização em origens não seguras, e esperamos que outros façam isso.

A partir do Chrome 50, não será mais possível encontrar o local do usuário usando a API HTML5 Geolocation em páginas fornecidas por conexões não seguras. Isso significa que a página que está fazendo a chamada da API Geolocation precisa ser veiculada de um contexto seguro, como HTTPS.

Essa é uma questão importante, pois impactará diretamente qualquer site que exija o uso da API de geolocalização e não seja veiculado por https, mas é uma mudança que acreditamos ser benéfica para todos os usuários na Web. Esta postagem vai ajudar você a entender o raciocínio e como proceder.

Quando a mudança acontecerá?

Essa alteração entrou em vigor a partir do Chrome 50 (20 de abril de 2016, às 12h no horário do Pacífico).

O console de ferramentas para desenvolvedores do Chrome exibe avisos desde a versão 44 (lançada em 21 de julho de 2015).
Vários anúncios públicos descrevem a lógica (e a discussão) do motivo da mudança:

Várias outras fontes destacaram isso: Mobiforge (26 de janeiro de 2016), Wired (17 de março de 2016), VentureBeat (13 de abril de 2016).

Por que fizemos essa mudança?

A localização é um dado sensível. A exigência de HTTPS é necessária para proteger a privacidade dos dados de local dos usuários. Se a localização do usuário estiver disponível em um contexto não seguro, os invasores na rede poderão saber onde o usuário está, o que compromete seriamente a privacidade do usuário.

Quem será afetado com isso?

Isso afeta qualquer página que atualmente usa a API Geolocation em páginas veiculadas por HTTP (não seguras). Ela também afeta iframes HTTPS que usam a API Geolocation se estiverem incorporados em páginas HTTP. Não é possível fazer o polyfill usando um frame compartilhado fornecido por HTTPS.

Todo o meu app da Web precisa de HTTPS?

Não é um requisito que todo o app seja veiculado por HTTPS para usar a geolocalização. Somente páginas que usam geolocalização precisam ser veiculadas em um contexto seguro. Atualmente, um contexto seguro é qualquer coisa hospedada no nível superior em HTTPS ou localhost. Por exemplo, um iframe que aponta para uma origem segura, mas está hospedado em uma origem não segura (http ://paul.kinlan.me/), não pode chamar a API Geolocation.

Recomendamos que você migre para HTTPS, já que os recursos de navegadores novos e atuais exigem origens seguras.

Isso afeta o desenvolvimento local?

Não deve ser, porque o localhost foi declarado como "possivelmente seguro" na especificação e, em nosso caso, as solicitações de geolocalização exibidas no nível superior por localhost ainda funcionarão.

Posso detectar durante a execução se a geolocalização foi bloqueada por não estar em um contexto seguro?

Sim. A especificação de geolocalização define um objeto PositionError que é transmitido ao callback de falha das APIs de geolocalização. O objeto define as propriedades code e message.

Os erros causados por esse problema de contexto seguro retornarão code de 1, que é um "Erro de permissão negada". Você pode receber esse erro quando um usuário negou o acesso ou o sistema negou acesso aos locais dele. Isso significa que você terá que verificar a mensagem para saber qual foi o motivo exato.

Isso pode ser instável, porque pode mudar no futuro, mas um forte sinal de que se trata de um problema de conteúdo não seguro é procurar a string "Somente origens seguras são permitidas".

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

Lembre-se de que não é possível apenas verificar a origem da página porque ela pode estar em https, mas em um iframe hospedado de um contexto não seguro.

Preciso usar a geolocalização. O que devo fazer?

Se você quiser usar a API HTML5 Geolocation ou se seu site já a utiliza, migre as páginas que fazem chamadas dessa API para HTTPS, garantindo que elas sejam usadas em um contexto seguro.

Há várias opções de substituição disponíveis para conseguir a localização de um usuário que não são afetadas por essa mudança, como a API Google Maps Geolocation, o GeoIP (por exemplo, há outras soluções com base geográfica) e um CEP inserido pelo usuário. No entanto, é altamente recomendável que o melhor caminho para garantir o acesso contínuo à geolocalização é mudar para HTTPS.