Aqui na DoiT, nossa missão é ajudar quem usa a nuvem a gerenciar workloads com eficiência, segurança e custos otimizados. Um dos desafios que alguns dos nossos clientes enfrentam é a autenticação nas APIs do Google Workspace, principalmente quando a chamada precisa executar uma operação em nome de um usuário sem exigir interação direta dele — cenário conhecido como 2-Legged OAuth flow.
O Google oferece três métodos de autenticação para interagir com suas APIs:
1. API Keys: indicadas para acessar informações públicas, como consultar a Google Air Quality API para obter dados de qualidade do ar.
2. OAuth Credentials: usadas quando a aplicação precisa do consentimento do usuário para fazer chamadas de API em nome dele, em um fluxo 3-legged OAuth.
- Service Account Authentication: o foco da nossa conversa de hoje. Esse método permite executar ações em nome dos usuários sem exigir interação deles e funciona em um fluxo 2-legged OAuth.
Vamos a um caso de uso prático: buscar eventos de calendário de um usuário da nossa organização Workspace dentro de uma aplicação backend que analisa as agendas dos usuários para identificar o melhor horário para um evento.
API keys não dão conta dessa tarefa (não funcionam com APIs não públicas) e, embora as OAuth credentials funcionem, elas exigem consentimento do usuário. Já a service account authentication permite acessar o endpoint da API sem nenhum envolvimento do usuário — e é justamente esse método que vamos explorar aqui.
Para implementar a service account authentication e autorizar chamadas à Google Calendar API em nome dos usuários, siga estes passos:
1. Crie uma service account no Google Cloud.
2. Delegue autoridade em todo o domínio (domain-wide authority) à service account — tarefa restrita aos administradores do Google Workspace.
3. Autentique-se na Google Calendar API com as credenciais delegadas, processo também chamado de user impersonation.
Veja um trecho mostrando como inicializar o cliente da API com credenciais delegadas em Python:
from __future__ import print_function
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'credentials.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
def main():
delegated_credentials = credentials.with_subject('[email protected]')
service = build('calendar', 'v3', credentials=delegated_credentials)
events_results = service.calendars().events.list(calendarId='primary').execute()
events = events_result.get("items", [])
if not events:
print("No upcoming events found.")
return
for event in events:
start = event["start"].get("dateTime", event["start"].get("date"))
print(start, event["summary"])
if __name__ == '__main__':
main()
Vale destacar que o cliente da API precisa ser inicializado com as credenciais delegadas para cada usuário em nome de quem as chamadas serão feitas:
delegated_credentials = credentials.with_subject('[email protected]')
service = build('calendar', 'v3', credentials=delegated_credentials)
[email protected] é o usuário do Workspace em nome de quem a chamada será executada — neste caso, para acessar o calendário dele.
Essa abordagem se diferencia do método com OAuth credentials, mostrado no guia de quickstart do cliente Python da Calendar API, que adota um fluxo 3-legged OAuth com consentimento do usuário.
Nosso objetivo é esclarecer a autenticação backend com as APIs do Google Workspace, especialmente nos cenários em que a interação do usuário não deve fazer parte do fluxo. Esperamos que este guia ajude a dissipar dúvidas. Convidamos você a conhecer mais sobre as nossas áreas de atuação em https://www.doit.com/services/
employed
Should be "deployed" I think :)
Responder
retrieving
"r" should be upper case.
Responder
O foco da nossa conversa de hoje, este método permite executar ações em nome dos usuários sem exigir interação deles. Funciona em um fluxo 2-legged OAuth.
Formatting should not be bold letters.
Responder
Ver todas as respostas
por
[Modernizando o acesso a aplicações internas no GKE: de VPN a um External Gateway com IAP\ \
13/01/2025
por
[Construindo arquitetura AWS com MCP Servers e Strands Agents\ \
22/09/2025
por
[Fingerprints JA3 e JA4 no AWS WAF e além\ \
10/04/2025
por
[Padrões de arquitetura de VPC: abordagens standalone vs. centralizadas na AWS e no GCP\ \
25/11/2024
por
[Stanford acabou de matar o prompt engineering com 8 palavras (e eu não acredito que funcionou)\ \
19/10/2025
[A clap icon25K\ \
[10 habilidades indispensáveis para o Claude (e para qualquer coding agent) em 2026\ \
9 de mar.
[A clap icon1K\ \
[O fim dos dashboards e dos design systems\ \
26/11/2025
[A clap icon6.5K\ \
[A Anthropic lançou o (novo) Claude Code Auto Mode (chega de permission modes)\ \
há 6 dias
[A clap icon391\ \
por
[Você provavelmente está comprando a máquina errada para IA local — a verdade sobre Mac Mini M4 vs. Mini PC que ninguém…\ \
20 de mar.
[A clap icon1.1K\ \
por
[Parei de usar o ChatGPT por 30 dias. O que aconteceu com o meu cérebro foi assustador.\