Visão geral
Em 16 de fevereiro de 2022, anunciamos planos para tornar as interações do OAuth do Google mais seguras usando fluxos do OAuth mais seguros. Este guia ajuda a entender as mudanças necessárias e as etapas para migrar do fluxo de endereços IP de loopback para alternativas compatíveis.
Essa iniciativa é uma medida de proteção contra ataques de phishing e falsificação de identidade de apps durante interações com os endpoints de autorização do OAuth 2.0 do Google.
O que é o fluxo de endereço IP do Loopback?
O fluxo de endereço IP de loopback é compatível com o uso de um endereço IP de loopback oulocalhost
como o componente do host do URI de redirecionamento para onde
as credenciais são enviadas depois que um usuário aprova uma solicitação de consentimento OAuth. Esse fluxo é
vulnerável a ataques de
homens do meio
em que um app nocivo, acessando a mesma interface de loopback em alguns
sistemas operacionais, pode interceptar a resposta do servidor de autorização ao URI
de redirecionamento fornecido e ter acesso ao código de autorização.
O fluxo de endereços IP de loopback está sendo descontinuado para os tipos de clientes nativos do iOS, Android e Chrome Chrome, mas continuará compatível com apps para computador.
Principais datas de compliance
- 14 de março de 2022: novos clientes OAuth impedidos de usar o fluxo de endereços IP do Loopback
- 1o de agosto de 2022: uma mensagem de aviso voltada para o usuário poderá ser exibida para solicitações OAuth que não estiverem em conformidade
- 31 de agosto de 2022: o fluxo de endereços IP do Loopback foi bloqueado para clientes OAuth nativos do Android, do app Chrome e do iOS criados antes de 14 de março de 2022
- 21 de outubro de 2022: todos os clientes atuais serão bloqueados, incluindo os isentos. Os clientes podem solicitar uma extensão única para continuar usando o fluxo de endereços IP do Loopback até 21 de outubro de 2022, conforme instruído na mensagem de e-mail enviada aos clientes afetados.
Uma mensagem de aviso voltada ao usuário pode ser exibida para solicitações fora de conformidade um mês antes, ou seja, 1o de agosto de 2022, o fluxo de endereços IP do Loopback foi totalmente descontinuado. A mensagem informará aos usuários que o app pode ser bloqueado em breve ao exibir o e-mail de suporte que você registrou na tela de permissão OAuth no Console de APIs do Google.
É possível confirmar a mensagem de aviso voltada ao usuário e suprimir ela passando um parâmetro de consulta na chamada de autorização, conforme mostrado abaixo.- Acesse o código do app em que as solicitações são enviadas para o endpoint de autorização do OAuth 2.0 do Google.
-
Adicione um parâmetro
ack_loopback_shutdown
com um valor de data de aplicação: 31/08/2022 à solicitação de fluxo de redirecionamento. Exemplo:ack_loopback_shutdown=2022-08-31
- Determine se você será afetado.
- Migre para uma alternativa compatível se você for afetado.
Determine se você será afetado
Revise seu tipo de ID do cliente OAuth
Navegue até o Credentials page do Google API Console e visualize o tipo de ID do cliente OAuth na seção IDs do cliente OAuth 2.0. Será um dos seguintes: Aplicativo da Web, Android, iOS, Plataforma Universal do Windows (UWP), App do Chrome, TVs e dispositivos de entrada limitada, App para computador.
Avance para a próxima etapa se o tipo de cliente for Android, app Chrome ou iOS e você estiver usando o fluxo de endereços IP de loopback.
Não é necessário fazer nada relacionado a essa suspensão de uso se você estiver usando o fluxo de endereços IP de loopback em um cliente OAuth de app para computador, porque o uso com esse tipo de cliente OAuth continuará sendo compatível.
Como determinar se o app está usando o fluxo de endereços IP de loopback
Inspecione o código do app ou a chamada de rede de saída (caso o app esteja usando uma biblioteca OAuth) para determinar se a solicitação de autorização do Google OAuth que seu app está fazendo está usando valores de URI de redirecionamento de loopback.
Inspecionar o código do aplicativo
redirect_uri
tem algum dos
valores a seguir:
-
redirect_uri=http://127.0.0.1:<port>
, por exemplo,redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, por exemplo,redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, por exemplo,redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Inspecionar chamadas de rede realizadas
- Aplicativo da Web: inspecione a atividade de rede no Chrome
- Android: inspecione o tráfego de rede com o Network Inspector
-
Apps do Chrome
- Acesse a página de extensões do Chrome
- Marque a caixa de seleção Modo do desenvolvedor no canto superior direito da página da extensão.
- Selecione a extensão que você quer monitorar
- Clique no link página em segundo plano na seção Inspecionar visualizações da página da extensão.
- Um pop-up de Ferramentas para desenvolvedores será aberto, e você poderá monitorar o tráfego de rede na guia "Rede".
- iOS: como analisar tráfego HTTP com instrumentos
- Plataforma Universal do Windows (UWP) - Inspecionar o tráfego de rede no Visual Studio
- Apps para computador: use uma ferramenta de captura de rede disponível para o sistema operacional em que o app foi desenvolvido
redirect_uri
tem algum dos
valores a seguir:
-
redirect_uri=http://127.0.0.1:<port>
, por exemplo,redirect_uri=http://127.0.0.1:3000
-
redirect_uri=http://[::1]:<port>
, por exemplo,redirect_uri=http://[::1]:3000
-
redirect_uri=http://localhost:<port>
, por exemplo,redirect_uri=http://localhost:3000
https://accounts.google.com/o/oauth2/v2/auth? redirect_uri=http://localhost:3000& response_type=code& scope=<SCOPES>& state=<STATE>& client_id=<CLIENT_ID>
Migrar para uma alternativa compatível
Clientes móveis (Android / iOS)
Se você determinar que seu app usa o fluxo de endereços IP de loopback com um tipo de cliente OAuth do Android ou do iOS, migre para os SDKs para dispositivos móveis do Login do Google (Android, iOS).
O SDK facilita o acesso às APIs do Google e processa todas as chamadas para os endpoints de autorização do OAuth 2.0 do Google.
Os links de documentação abaixo fornecem informações sobre como usar os SDKs do Login do Google para acessar as APIs do Google sem usar um URI de redirecionamento de endereço IP de loopback.
Acessar APIs do Google no Android
Acesso do lado do servidor (off-line)
O exemplo abaixo mostra como acessar as APIs do Google do lado do servidor no Android.Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); // request a one-time authorization code that your server exchanges for an // access token and sometimes refresh token String authCode = account.getServerAuthCode(); // Show signed-in UI updateUI(account); // TODO(developer): send code to server and exchange for access/refresh/ID tokens } catch (ApiException e) { Log.w(TAG, "Sign-in failed", e); updateUI(null); }
Consulte o guia de acesso do lado do servidor sobre como acessar as APIs do Google do lado do servidor.
Acessar as APIs do Google em um app iOS
Acesso do lado do cliente
O exemplo abaixo mostra como acessar APIs do Google no lado do cliente para iOS.
user.authentication.do { authentication, error in guard error == nil else { return } guard let authentication = authentication else { return } // Get the access token to attach it to a REST or gRPC request. let accessToken = authentication.accessToken // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for // use with GTMAppAuth and the Google APIs client library. let authorizer = authentication.fetcherAuthorizer() }
Use o token de acesso para chamar a API, incluindo o token de acesso no
cabeçalho de uma solicitação REST ou gRPC (Authorization: Bearer ACCESS_TOKEN
)
ou usando o autorizador do fetcher (GTMFetcherAuthorizationProtocol
) com a
biblioteca de cliente das APIs do Google para Objective-C para REST.
Consulte o guia de acesso do lado do cliente sobre como acessar as APIs do Google no lado do cliente. sobre como acessar as APIs do Google no lado do cliente.
Acesso do lado do servidor (off-line)
O exemplo abaixo mostra como acessar as APIs do Google no lado do servidor para oferecer suporte a um cliente iOS.GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in guard error == nil else { return } guard let user = user else { return } // request a one-time authorization code that your server exchanges for // an access token and refresh token let authCode = user.serverAuthCode }
Consulte o guia de acesso do lado do servidor sobre como acessar as APIs do Google do lado do servidor.
Cliente de apps do Chrome
Se você determinar que seu app usa o fluxo de endereços IP de loopback no cliente do app Chrome, migre para a API Chrome Identity.
O exemplo abaixo mostra como conseguir todos os contatos do usuário sem o uso de um URI de redirecionamento de endereço IP de loopback.
window.onload = function() { document.querySelector('button').addEventListener('click', function() { // retrieve access token chrome.identity.getAuthToken({interactive: true}, function(token) { // .......... // the example below shows how to use a retrieved access token with an appropriate scope // to call the Google People API contactGroups.get endpoint fetch( 'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY', init) .then((response) => response.json()) .then(function(data) { console.log(data) }); }); }); };
Consulte o guia da API Chrome Identity para ver mais informações sobre como acessar usuários de autenticação e chamar endpoints do Google com a API Chrome Identity.