As APIs do Google usam o protocolo OAuth 2.0 para autenticação e autorização. O Google é compatível com cenários comuns do OAuth 2.0, como os para aplicativos do servidor da Web, do lado do cliente, instalados e de entrada limitada.
Para começar, consiga as credenciais do cliente OAuth 2.0 em Google API Console. Em seguida, seu 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 do Google que você quer acessar. Para acessar 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), faça uma experiência com o OAuth 2.0 Playground.
Nesta página, você encontra uma visão geral dos cenários de autorização do OAuth 2.0 suportados pelo Google e links para conteúdos mais detalhados. Para mais detalhes sobre o uso do 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. De modo geral, você segue cinco etapas:
1. Consiga as credenciais do OAuth 2.0 do Google API Console.
Acesse Google API Console para receber as credenciais do OAuth 2.0, como um ID e uma chave secreta do cliente, conhecidos 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, ao contrário de um aplicativo de servidor da Web.
É necessário criar um cliente OAuth apropriado para a plataforma em que seu app será executado. Por exemplo:
- Para apps da Web do lado do servidor ou JavaScript, use o tipo de cliente "Web". Não use esse tipo de cliente para nenhum outro aplicativo, como apps nativos ou para dispositivos móveis.
- Para apps Android, use o tipo de cliente "Android".
- Para apps iOS e macOS, use o tipo de cliente "iOS".
- Para apps da plataforma universal do Windows, use o tipo de cliente "Plataforma universal do Windows".
- Para dispositivos de entrada limitados, como TVs ou dispositivos incorporados, use o tipo de cliente "TVs e dispositivos de entrada limitada".
- Para interações de servidor para servidor, use contas de serviço.
2. Consiga um token de acesso do servidor de autorização do Google.
Antes que seu aplicativo possa acessar dados particulares usando uma API do Google, ele precisa receber um token que conceda acesso a essa API. Um único token de acesso pode conceder diferentes graus de acesso a várias APIs. Um parâmetro variável chamado scope
controla o conjunto de recursos e operações permitidos por um token de acesso. Durante a solicitação do token de acesso, seu 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 sem navegador usa solicitações de serviços da Web.
Algumas solicitações exigem uma etapa de autenticação em que o usuário faz login com a Conta do Google. Após o login, o usuário é perguntado se quer conceder uma ou mais permissões que seu aplicativo está solicitando. Esse processo é chamado de consentimento do usuário.
Se o usuário concede pelo menos uma permissão, o servidor de autorização do Google envia ao seu aplicativo um token de acesso (ou um código de autorização que seu aplicativo pode usar para conseguir 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 app compatível com o salvamento de um evento em uma agenda não deve solicitar acesso ao Google Agenda até que o usuário pressione o botão "Adicionar à Agenda". Consulte Autorização incremental.
3. Examine os escopos de acesso concedidos pelo usuário.
Compare os escopos incluídos na resposta do token de acesso com aqueles 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 funcionam sem acesso à API relacionada.
O escopo incluído na sua solicitação pode não corresponder ao escopo na sua 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 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
people.updateContact
da API Google People
exige um escopo definido de https://www.googleapis.com/auth/contacts
.
4. Enviar o token de acesso para uma API.
Depois que um aplicativo recebe um token de acesso, ele o envia 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 é recomendado, porque os parâmetros de URI podem acabar em arquivos de registro que não são completamente seguros. Além disso, é uma boa prática REST evitar a criação de nomes desnecessários de parâmetros de URI.
Os tokens de acesso são válidos apenas para o conjunto de operações e recursos descritos no scope
da solicitação de 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, você pode 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. O aplicativo pode receber um token de atualização, caso precise de acesso a uma API do Google além do ciclo de vida de um único token de acesso. Esse token 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, Go, Python, Ruby e ASP.NET.
A sequência de autorização começa quando seu aplicativo redireciona um navegador para um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso solicitado. O Google lida com a autenticação do usuário, a seleção da 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 de atualização.
O aplicativo precisa armazenar o token de atualização para uso futuro e usá-lo 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 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 o usa para chamar um endpoint da API do Google.](https://developers.google.cn/static/identity/protocols/oauth2/images/flows/authorization-code.png?authuser=0000&hl=pt-br)
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 por meio de Google API Console, especifique que esse é um aplicativo instalado e selecione Android, app Chrome, iOS, Plataforma universal do Windows (UWP, na sigla em inglês) ou app para computador como o tipo de aplicativo.
O processo resulta em um ID do cliente e, em alguns casos, uma chave secreta do cliente, que você incorpora ao código-fonte do seu aplicativo. Nesse contexto, a chave secreta do cliente obviamente não é tratada como secreta.
A sequência de autorização começa quando seu aplicativo redireciona um navegador para um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso solicitado. O Google lida com a autenticação do usuário, a seleção da 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 de atualização.
O aplicativo precisa armazenar o token de atualização para uso futuro e usá-lo 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 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 o usa para chamar um endpoint da API do Google.](https://developers.google.cn/static/identity/protocols/oauth2/images/flows/authorization-code.png?authuser=0000&hl=pt-br)
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 para um URL do Google. O URL inclui parâmetros de consulta que indicam o tipo de acesso solicitado. O Google lida com a autenticação do usuário, a seleção da 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.
![O aplicativo em JS envia uma solicitação de token ao servidor de autorização do Google,
recebe um token, valida-o e o usa para chamar um endpoint da
API do Google.](https://developers.google.cn/static/identity/protocols/oauth2/images/flows/implicit.png?authuser=0000&hl=pt-br)
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 receber 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, alterna para outro dispositivo ou computador 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 aprovar o acesso, a resposta do servidor do Google conterá um token de acesso e de atualização. O aplicativo precisa armazenar o token de atualização para uso futuro e usá-lo 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](https://developers.google.cn/static/identity/protocols/images/oauth2/device/flow.png?authuser=0000&hl=pt-br)
Para mais detalhes, consulte Usar o OAuth 2.0 para dispositivos.
Contas de serviço
As APIs do Google, como a Prediction API e o Google Cloud Storage, podem agir em nome do seu aplicativo sem acessar as informações do usuário. Nessas situações, o aplicativo precisa provar a própria identidade para a API, mas nenhum consentimento do usuário é necessário. Da mesma forma, em cenários corporativos, 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 é uma conta que pertence ao seu aplicativo e não a um usuário final individual. O 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 APIs do Google em nome dos usuários finais e, às vezes, o consentimento do usuário é necessário.
As credenciais de uma conta de serviço, que você recebe do Google API Console, incluem 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 gerar uma solicitação de token de acesso no formato apropriado. Em seguida, 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.
![O aplicativo do servidor usa um JWT para solicitar um token do servidor de autorização do Google e, em seguida, usa esse token para chamar um endpoint da API do Google. Não há
usuário final envolvido.](https://developers.google.cn/static/identity/protocols/oauth2/images/flows/jwt.png?authuser=0000&hl=pt-br)
Para mais detalhes, consulte a documentação da conta de serviço.
Tamanho do token
O tamanho dos tokens pode variar até 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 do OAuth 2.0 da API do Google, mas têm diferentes limites de tamanho de token. Para mais detalhes, consulte a documentação da API.
O Google se reserva o direito de alterar o tamanho do token dentro desses limites, e seu aplicativo precisa ser compatível com tamanhos de token variáveis.
Atualizar a validade do token
Escreva seu código para prever a possibilidade de um token de atualização concedido parar de funcionar. Um token de atualização pode parar de funcionar por um destes motivos:
- O usuário revogou o acesso do seu 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 escopos do Gmail.
- A conta do usuário excedeu o número máximo de tokens de atualização (em tempo real) concedidos.
- Se um administrador
definir qualquer um dos serviços solicitados nos escopos do app como Restrito (o erro
é
admin_policy_enforced
). - Para as APIs do Google Cloud Platform: a duração da sessão definida pelo administrador pode ter sido excedida.
Um projeto do Google Cloud Platform com uma tela de permissão OAuth configurada para um tipo de usuário externo e com o status de publicação "Testando" recebe um token de atualização que expira em sete dias, a menos que os únicos escopos do OAuth solicitados sejam um subconjunto de nome, endereço de e-mail e perfil de usuário (por meio dos escopos
userinfo.email, userinfo.profile, openid
ou equivalentes do OpenID Connect).
Atualmente, há um limite de 100 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 vai invalidar automaticamente o token de atualização mais antigo sem aviso prévio. Esse limite não se aplica a contas de serviço.
Também há um limite maior no número total de tokens de atualização que uma conta de usuário ou de serviço pode ter em todos os clientes. A maioria dos usuários normais não excede esse limite, mas a conta de um desenvolvedor usada para testar uma implementação pode.
Se você precisar autorizar vários programas, máquinas ou dispositivos, uma solução alternativa é limitar a 15 ou 20 clientes autorizados por Conta do Google. 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
eles acessam recursos do GCP, usando o
recurso de controle de sessão
do Google Cloud. Esta 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, na expiração da duração da sessão, suas
chamadas de API apresentarão um erro semelhante ao que aconteceria se o token de atualização fosse revogado. A
chamada falhará com um tipo de erro invalid_grant
. O campo error_subtype
pode ser usado para distinguir entre um token revogado e uma falha devido a uma política
de controle de sessão (por exemplo, "error_subtype": "invalid_rapt"
). Como as durações da sessão podem ser muito limitadas (entre 4 horas e 2 horas de autenticação).
Da mesma forma, não é permitido usar nem 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 operações ou jobs de longa duração, e um cliente aplicar políticas de controle de sessão a esses usuários, o aplicativo do servidor falhará porque 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 para administradores.
Bibliotecas de cliente
As bibliotecas de cliente a seguir se integram a frameworks conhecidos, o que facilita a implementação do OAuth 2.0. Mais recursos serão adicionados às bibliotecas com o tempo.
- Biblioteca de cliente das APIs do Google para Java
- Biblioteca de cliente das APIs do Google para Python
- Biblioteca de cliente das APIs do Google para Go
- Biblioteca de cliente das APIs do Google para .NET
- Biblioteca de cliente das APIs do Google para Ruby
- Biblioteca de cliente das APIs do Google para PHP
- Biblioteca de cliente das APIs do Google para JavaScript
- GTMAppAuth - biblioteca de cliente OAuth para Mac e iOS