Visão geral
Em 16 de fevereiro de 2022, anunciamos planos para proteger as interações do Google OAuth com fluxos do OAuth mais seguros. Este guia ajuda a entender as alterações 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 apps durante interações com os endpoints de autorização do OAuth 2.0 do Google.
O que é o fluxo de endereços IP de 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 no 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 para o URI de redirecionamento fornecido e ter acesso ao código de autorização.
O fluxo de endereços IP de loopback será suspenso para os tipos de clientes OAuth iOS, Android e Chrome, mas continuará compatível em apps para computador.
Principais datas de conformidade
- 14 de março de 2022: novos clientes OAuth impedidos de usar o fluxo de endereços IP de loopback
- 1o de agosto de 2022: uma mensagem de aviso exibida ao usuário será exibida para solicitações OAuth não compatíveis
- 31 de agosto de 2022: o fluxo de endereços IP de loopback foi bloqueado para clientes Android, Chrome e OAuth nativos criados antes de 14 de março de 2022
- 21 de outubro de 2022: todos os clientes atuais serão bloqueados, incluindo os isentos.
Uma mensagem de erro exibida ao usuário será exibida para solicitações não compatíveis. A mensagem informará aos usuários que o app está bloqueado enquanto exibe o e-mail de suporte que você registrou na Tela de consentimento OAuth no Console de APIs do Google.
- Determine se você será afetado.
- Migre para uma alternativa compatível se você for afetado.
Determinar se você será afetado
Revisar o 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. Pode ser um dos seguintes: aplicativo da Web, Android, iOS, plataforma universal do Windows (UWP), aplicativo do Chrome, dispositivos de TV e entrada limitada, aplicativo 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.
Você não precisa fazer nada relacionado a essa suspensão de uso se estiver usando o fluxo de endereços IP de loopback em um cliente OAuth de aplicativo para computador, já que o uso com esse tipo de cliente OAuth continuará sendo suportado.
Como determinar se o app está usando o fluxo de endereços IP de loopback
Inspecione o código do seu app ou a chamada de rede de saída (caso seu app esteja usando uma biblioteca OAuth) para determinar se a solicitação de autorização do Google OAuth está usando os valores de URI de redirecionamento de loopback.
Inspecionar o código do aplicativo
redirect_uri
tem um dos seguintes valores: -
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 chamada de rede realizada
- 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 de extensões.
- Selecione a extensão que você quer monitorar
- Clique no link da página de plano de fundo na seção Inspecionar visualizações da página de extensões.
- Um pop-up Ferramentas do desenvolvedor será aberto, onde você poderá monitorar o tráfego da rede na guia Rede
- iOS: análise de tráfego HTTP com instrumentos
- Plataforma Universal Windows (UWP): inspecione 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 um dos seguintes valores:
-
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 está usando o fluxo de endereços IP de loopback com um tipo de cliente OAuth Android ou iOS, será necessário migrar usando nossos SDKs para dispositivos móveis do Login do Google (Android, iOS).
O SDK facilita o acesso às APIs do Google e lida com todas as chamadas para os pontos de extremidade 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 servidor (off-line)
O exemplo abaixo mostra como acessar as APIs do Google no 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 no lado do servidor.
Acessar APIs do Google em um aplicativo para iOS
Acesso do lado do cliente
O exemplo abaixo mostra como acessar as APIs do Google no lado do cliente no 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 coletor (GTMFetcherAuthorizationProtocol
) com a
biblioteca de cliente das APIs do Google para Objective-C para REST.
Revise 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 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 no servidor.
Cliente de aplicativo do Google Chrome
Se você determinar que o app usa o fluxo de endereços IP de loopback no cliente do app Chrome, será necessário migrar para a API Chrome Identity.
O exemplo abaixo mostra como obter 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 mais informações sobre como acessar usuários autenticados e chamar os endpoints do Google com a API Chrome Identity.