Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Execução de API em nome de usuários do Google Workspace com Domain-Wide Delegation: o passo a passo

By Nir ForerJul 31, 20244 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

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.

  1. 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/

Piyush Patil

30/07/2024

employed

Should be "deployed" I think :)

Responder

Piyush Patil

30/07/2024

retrieving

"r" should be upper case.

Responder

Piyush Patil

30/07/2024

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.\