Como usar o OAuth 2.0 para acessar as APIs do Google

As APIs do Google usam protocolo OAuth 2.0 para autenticação e autorização. O Google é compatível com cenários OAuth 2.0 comuns, como aplicativos de dispositivos da Web, lado do cliente, instalados e de entrada limitada.

Para começar, acesse as credenciais do cliente OAuth 2.0 na Google API Console. Em seguida, o aplicativo cliente solicita um token de acesso do servidor de autorização do Google, extrai um token da resposta e o envia para a API Google que você quer acessar. Para uma demonstração interativa do uso do OAuth 2.0 com o Google (incluindo a opção de usar suas próprias credenciais de clientes), teste o OAuth 2.0 Playground.

Esta página fornece uma visão geral dos cenários de autorização do OAuth 2.0 compatíveis com o Google e fornece links para conteúdos mais detalhados. Para detalhes sobre como usar o OAuth 2.0 para autenticação, consulte OpenID Connect.

Etapas básicas

Todos os aplicativos seguem um padrão básico ao acessar uma API do Google usando o OAuth 2.0. Em um nível superior, você segue cinco etapas:

1. Consiga credenciais do OAuth 2.0 do Google API Console.

Acesse Google API Console para ver credenciais do OAuth 2.0, como um ID e uma chave secreta do cliente que são conhecidas pelo Google e pelo seu aplicativo. O conjunto de valores varia de acordo com o tipo de aplicativo que você está criando. Por exemplo, um aplicativo JavaScript não requer um secret, mas um aplicativo de servidor da Web,

2. Receber um token de acesso do servidor de autorização do Google.

Antes de acessar os dados particulares usando uma API do Google, o aplicativo precisa receber um token de acesso que conceda acesso a essa API. Um único token de acesso pode conceder diferentes graus de acesso a várias APIs. Um parâmetro de variável chamado scope controla o conjunto de recursos e operações permitidos por um token de acesso. Durante a solicitação de token de acesso, o aplicativo envia um ou mais valores no parâmetro scope.

Há várias maneiras de fazer essa solicitação, e elas variam de acordo com o tipo de aplicativo que você está criando. Por exemplo, um aplicativo JavaScript pode solicitar um token de acesso usando um redirecionamento de navegador para o Google, enquanto um aplicativo instalado em um dispositivo que não tem um navegador usa solicitações de serviço da Web.

Algumas solicitações exigem uma etapa de autenticação em que o usuário faça login com a Conta do Google. Após fazer login, o usuário é perguntado se ele quer conceder uma ou mais permissões solicitadas pelo aplicativo. Esse processo é chamado de consentimento do usuário.

Se o usuário conceder pelo menos uma permissão, o servidor de autorização do Google enviará ao aplicativo um token de acesso (ou um código de autorização que seu aplicativo possa usar para receber um token de acesso) e uma lista de escopos de acesso concedidos por esse token. Se o usuário não conceder a permissão, o servidor retornará um erro.

Geralmente, é uma prática recomendada solicitar escopos de forma incremental, no momento em que o acesso é necessário, e não antecipadamente. Por exemplo, um aplicativo que queira salvar o evento em uma agenda não deve solicitar o acesso ao Google Agenda até que o usuário clique no botão "Adicionar à agenda". Consulte Autorização incremental.

3. Examinar os escopos de acesso concedidos pelo usuário.

Compare os escopos incluídos na resposta do token de acesso com os escopos necessários para acessar recursos e funcionalidades do aplicativo que dependem do acesso a uma API do Google relacionada. Desative todos os recursos do app que não funcionem sem acesso à API relacionada.

O escopo incluído na solicitação pode não corresponder ao escopo na resposta, mesmo que o usuário tenha concedido todos os escopos solicitados. Consulte a documentação de cada API do Google para ver os escopos necessários para acesso. Uma API pode mapear diversos valores de string de escopo para um único escopo de acesso, retornando a mesma string de escopo para todos os valores permitidos na solicitação. Exemplo: a API Google People pode retornar um escopo de https://www.googleapis.com/auth/contacts quando um app solicitou que um usuário autorize um escopo de https://www.google.com/m8/feeds/. O método da API Google People people.updateContact precisa de um escopo concedido de https://www.googleapis.com/auth/contacts.

4. Enviar o token de acesso a uma API

Depois de receber um token de acesso, o aplicativo envia o token para uma API do Google em um cabeçalho de solicitação de autorização HTTP. É possível enviar tokens como parâmetros de string de consulta de URI, mas isso não é recomendável, porque os parâmetros de URI podem acabar em arquivos de registro que não são completamente seguros. Além disso, é recomendável não criar nomes de parâmetros de URI desnecessários.

Os tokens de acesso são válidos apenas para o conjunto de operações e recursos descritos no scope da solicitação do token. Por exemplo, se um token de acesso for emitido para a API Google Calendar, ele não concederá acesso à API Google Contacts. No entanto, é possível enviar esse token de acesso à API Google Calendar várias vezes para operações semelhantes.

5. Atualize o token de acesso, se necessário.

Os tokens de acesso têm duração limitada. Se o aplicativo precisa de acesso a uma API do Google além do ciclo de vida de um único token de acesso, ele pode receber um token de atualização. Um token de atualização permite que o aplicativo receba novos tokens de acesso.

Cenários

Aplicativos do servidor da Web

O endpoint do Google OAuth 2.0 é compatível com aplicativos de servidor da Web que usam linguagens e frameworks como PHP, Java, Python, Ruby e ASP.NET.

A sequência de autorização começa quando seu aplicativo redireciona um navegador a um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso que está sendo solicitado. O Google lida com a autenticação, a seleção de sessão e o consentimento do usuário. O resultado é um código de autorização, que o aplicativo pode trocar por um token de acesso e um token de atualização.

O aplicativo deve armazenar o token de atualização para uso futuro e usar o token de acesso para acessar uma API do Google. Quando o token de acesso expirar, o aplicativo usará o token de atualização para receber um novo.

Seu aplicativo envia uma solicitação de token ao servidor de autorização do Google, recebe um código de autorização, troca o código por um token e usa o token para chamar um endpoint da API do Google.

Para detalhes, consulte Usar o OAuth 2.0 para aplicativos de servidor da Web.

Apps instalados

O endpoint do Google OAuth 2.0 é compatível com aplicativos instalados em dispositivos como computadores, dispositivos móveis e tablets. Ao criar um ID do cliente pelo Google API Console, especifique que esse é um aplicativo instalado e selecione Android, app Chrome, iOS, Plataforma Universal Windows (UWP) ou app para computador como o tipo de aplicativo.

O processo gera um ID do cliente e, em alguns casos, uma chave secreta do cliente, que você incorpora no código-fonte do aplicativo. Nesse contexto, obviamente, a chave secreta do cliente não é tratada como chave secreta.

A sequência de autorização começa quando seu aplicativo redireciona um navegador a um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso que está sendo solicitado. O Google lida com a autenticação, a seleção de sessão e o consentimento do usuário. O resultado é um código de autorização, que o aplicativo pode trocar por um token de acesso e um token de atualização.

O aplicativo deve armazenar o token de atualização para uso futuro e usar o token de acesso para acessar uma API do Google. Quando o token de acesso expirar, o aplicativo usará o token de atualização para receber um novo.

Seu aplicativo envia uma solicitação de token ao servidor de autorização do Google, recebe um código de autorização, troca o código por um token e usa o token para chamar um endpoint da API do Google.

Para detalhes, consulte Usar o OAuth 2.0 para aplicativos instalados.

Aplicativos do lado do cliente (JavaScript)

O endpoint do Google OAuth 2.0 é compatível com aplicativos JavaScript executados em um navegador.

A sequência de autorização começa quando seu aplicativo redireciona um navegador a um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso que está sendo solicitado. O Google lida com a autenticação, a seleção de sessão e o consentimento do usuário.

O resultado é um token de acesso que o cliente precisa validar antes de incluí-lo em uma solicitação de API do Google. Quando o token expira, o aplicativo repete o processo.

Seu aplicativo JS envia uma solicitação de token para o servidor de autorização do Google, recebe um token, valida o token e o usa para chamar um endpoint da API do Google.

Para detalhes, consulte Usar o OAuth 2.0 para aplicativos do lado do cliente.

Aplicativos em dispositivos de entrada limitada

O endpoint do Google OAuth 2.0 é compatível com aplicativos executados em dispositivos de entrada limitada, como consoles de jogos, câmeras de vídeo e impressoras.

A sequência de autorização começa com o aplicativo fazendo uma solicitação de serviço da Web a um URL do Google para um código de autorização. A resposta contém vários parâmetros, incluindo um URL e um código que o aplicativo mostra ao usuário.

O usuário recebe o URL e o código do dispositivo e, em seguida, muda para um dispositivo ou computador separado com recursos de entrada mais avançados. O usuário inicia um navegador, navega até o URL especificado, faz login e insere o código.

Enquanto isso, o aplicativo pesquisa um URL do Google em um intervalo especificado. Depois que o usuário aprova o acesso, a resposta do servidor do Google contém um token de acesso e de atualização. O aplicativo deve armazenar o token de atualização para uso futuro e usar o token de acesso para acessar uma API do Google. Quando o token de acesso expira, o aplicativo usa o token de atualização para receber um novo.

O usuário faz login em um dispositivo separado que tem um navegador

Para detalhes, consulte Usar o OAuth 2.0 para dispositivos.

Contas de serviço

As APIs do Google, como a API Prediction e o Google Cloud Storage, podem agir em nome do aplicativo sem acessar as informações do usuário. Nessas situações, seu aplicativo precisa comprovar a própria identidade para a API, mas o consentimento do usuário não é necessário. Da mesma forma, em cenários empresariais, seu aplicativo pode solicitar acesso delegado a alguns recursos.

Para esses tipos de interação de servidor para servidor, você precisa de uma conta de serviço, que pertence ao aplicativo, e não a um usuário final individual. Seu aplicativo chama as APIs do Google em nome da conta de serviço, e o consentimento do usuário não é necessário. Em cenários que não sejam de conta de serviço, seu aplicativo chama as APIs do Google em nome dos usuários finais e o consentimento do usuário às vezes é necessário.

As credenciais de uma conta de serviço extraídas do Google API Consoleincluem um endereço de e-mail gerado que é exclusivo, um ID do cliente e pelo menos um par de chaves pública/privada. Use o ID do cliente e uma chave privada para criar um JWT assinado e criar uma solicitação de token de acesso no formato apropriado. O aplicativo envia a solicitação de token para o servidor de autorização do Google OAuth 2.0, que retorna um token de acesso. O aplicativo usa o token para acessar uma API do Google. Quando o token expira, o aplicativo repete o processo.

Seu aplicativo de servidor usa um JWT para solicitar um token do servidor de autorização do Google. Em seguida, ele usa o token para chamar um endpoint da API do Google. Nenhum
                    usuário final está envolvido.

Para mais detalhes, consulte a documentação da conta de serviço.

Tamanho do token

O tamanho dos tokens varia de acordo com os seguintes limites:

  • Códigos de autorização: 256 bytes
  • Tokens de acesso: 2.048 bytes
  • Tokens de atualização: 512 bytes

Os tokens de acesso retornados pela API Security Token Service do Google Cloud são estruturados de maneira semelhante aos tokens de acesso OAuth 2.0 da API do Google, mas têm limites de tamanho de token diferentes. Para ver detalhes, consulte a documentação da API.

O Google reserva-se o direito de alterar o tamanho do token dentro desses limites, e seu aplicativo precisa ser compatível com os tamanhos de tokens variáveis de acordo com isso.

Atualizar a validade do token

Você precisa programar seu código para prever a possibilidade de um token de atualização concedido não funcionar mais. Um token de atualização pode parar de funcionar por um destes motivos:

  • O usuário revogou o acesso do app.
  • O token de atualização não é usado há seis meses.
  • O usuário alterou as senhas, e o token de atualização contém os escopos do Gmail.
  • A conta de usuário excedeu o número máximo de tokens de atualização concedidos (ativos).
  • O usuário pertence a uma organização do Google Cloud Platform que tem políticas de controle de sessão em vigor.

Um projeto do Google Cloud Platform com uma tela de permissão OAuth configurado para um tipo de usuário externo e com um status de publicação "quoquo;Testing"" recebe um token de atualização que expira em sete dias.

No momento, há um limite de 50 tokens de atualização por Conta do Google por ID do cliente OAuth 2.0. Se o limite for atingido, a criação de um novo token de atualização invalidará automaticamente o token mais antigo sem aviso prévio. Esse limite não se aplica a contas de serviço.

Há também um limite maior para o número total de tokens de atualização que uma conta de usuário ou de conta de serviço pode ter em todos os clientes. A maioria dos usuários normais não excede esse limite, mas uma conta do desenvolvedor usada para testar uma implementação pode.

Se você precisar autorizar vários programas, máquinas ou dispositivos, uma solução alternativa será limitar o número de clientes autorizados por Conta do Google a 15 ou 20. Se você for um administrador do Google Workspace, poderá criar outros usuários com privilégios de administrador e usá-los para autorizar alguns dos clientes.

Como lidar com políticas de controle de sessão para organizações do Google Cloud Platform (GCP)

Os administradores de organizações do GCP podem exigir uma reautenticação frequente dos usuários enquanto acessam os recursos do GCP usando o recurso de controle de sessão do Google Cloud. Essa política afeta o acesso ao Console do Google Cloud, ao SDK do Google Cloud (também conhecido como CLI gcloud) e a qualquer aplicativo OAuth de terceiros que exija o escopo do Cloud Platform. Se um usuário tiver uma política de controle de sessão em vigor durante a sessão, suas chamadas de API terão um erro semelhante ao que seria gerado se o token de atualização fosse revogado. A chamada falhará com um tipo de erro invalid_token. O tipo de suberro pode ser usado para distinguir entre um token de revogação e uma falha devido a uma política de controle de sessão. Como a duração das sessões pode ser muito limitada (entre 1 hora e 24 horas), esse cenário precisa ser processado corretamente ao reiniciar uma sessão de autenticação.

Da mesma forma, não é permitido usar ou incentivar o uso de credenciais de usuário para a implantação de servidor para servidor. Se as credenciais do usuário forem implantadas em um servidor para jobs ou operações de longa duração e um cliente aplicar políticas de controle de sessão a esses usuários, o aplicativo do servidor falhará, já que não será possível autenticar o usuário novamente quando a duração da sessão expirar.

Para mais informações sobre como ajudar seus clientes a implantar esse recurso, consulte este artigo de ajuda focado em administradores.

Bibliotecas de cliente

As seguintes bibliotecas de cliente se integram a frameworks conhecidos, o que simplifica a implementação do OAuth 2.0. Mais recursos serão adicionados às bibliotecas ao longo do tempo.