Formulário de contato

Nome

E-mail *

Mensagem *

Imagem

Google Cloud Console: OAuth 2.0, CLIENT_ID e Refresh Token do Zero

Google Cloud Console: OAuth 2.0, CLIENT_ID e Refresh Token do Zero

Publicado por em


@CanalQb no YouTube


@CanalQb

Google Cloud Console: OAuth 2.0, CLIENT_ID e Refresh Token do Zero


✅ Copiado!
GOOGLE CLOUD CONSOLE 2026

Seu passaporte para todas as APIs do Google — de graça

CLIENT_ID · CLIENT_SECRET · Refresh Token · 20+ APIs liberadas no plano gratuito

Se você já tentou automatizar qualquer coisa no ecossistema Google — seja fazer upload no YouTube, publicar no Blogger via script, ler planilhas do Drive ou enviar e-mails pelo Gmail — você esbarrou na mesma parede: OAuth 2.0. Três variáveis travam quase todo projeto: o CLIENT_ID, o CLIENT_SECRET e o refresh_token. Aqui no @CanalQb, rodamos e quebramos esse fluxo inúmeras vezes. Este guia é o resultado de tudo que funcionou.

ℹ️ Nota Técnica: OAuth 2.0 é o protocolo padrão de autorização do Google. Ele nunca expõe sua senha para o script — apenas gera um token de acesso temporário que o refresh_token renova automaticamente. Scripts fornecidos aqui são para fins educacionais. O @CanalQb não se responsabiliza por uso indevido das APIs.

O que é o Google Cloud Console e para que ele serve?

O Google Cloud Console é o painel central onde você cria projetos, habilita APIs e gera credenciais OAuth para acessar qualquer serviço do Google programaticamente. É gratuito para criar conta e projetos, e a maioria das APIs tem cotas diárias generosas no plano Free Tier — suficientes para automações pessoais e pequenos negócios.

Passo a passo: do zero ao Refresh Token funcionando

Acessar o Google Cloud Console

Abra o navegador e acesse console.cloud.google.com. Faça login com a conta Google que vai administrar as credenciais — de preferência uma conta principal de desenvolvedor, não uma conta compartilhada. A interface estará em inglês por padrão; você pode mudar o idioma no canto superior direito → ícone de engrenagem → Language.

Dica Aqui no @CanalQb: Use sempre uma conta Google dedicada para automações. Se o token for revogado por atividade suspeita, sua conta pessoal principal fica intocada.

Criar um novo Projeto

No topo da página você verá um seletor de projetos (geralmente escrito "Select a project" ou o nome do último projeto usado). Clique nele → no modal que abre, clique em "New Project" (canto superior direito do modal). Dê um nome descritivo como automacao-canalqb. A Location pode ficar como "No organization" para contas pessoais. Clique em Create e aguarde alguns segundos. Após criado, selecione-o no seletor.

⚠️ Atenção: Cada projeto tem cotas independentes. Se você vai usar múltiplas APIs com volumes altos, crie projetos separados por finalidade para não estourar cota em tudo ao mesmo tempo.

Habilitar as APIs que você precisa

No menu lateral esquerdo, vá em APIs & Services → Library. Use a barra de busca para encontrar cada API. Clique no card da API → clique em Enable. Pronto — a API está ativa no projeto. Veja a lista completa de APIs populares logo abaixo neste post — fizemos o mapeamento de tudo que vale habilitar.

ℹ️ APIs desabilitadas retornam o erro accessNotConfigured — se sua automação falhar com esse código, volte aqui e habilite a API correspondente.

Configurar a Tela de Permissão OAuth (Consent Screen)

Antes de criar as credenciais, você precisa configurar a tela de consentimento — é a tela que aparece pedindo permissão quando o OAuth abre o navegador. Vá em APIs & Services → OAuth consent screen.

  • User Type: Selecione "External" (disponível para todos). Para uso apenas pessoal isso basta; o app ficará em modo "Testing".
  • App name: Coloque algo como AutoCanalQb.
  • User support email: Seu e-mail Google.
  • Developer contact information: Seu e-mail novamente.
  • Clique em Save and Continue nas próximas telas (Scopes e Test Users) sem alterar nada por enquanto.
  • Na aba Test usersOBRIGATÓRIO — clique em "+ Add Users" e adicione o e-mail da conta que vai autorizar o OAuth. Sem isso o fluxo retorna erro 403.
🚫 Erro clássico: Esquecer de adicionar o e-mail em "Test users" é o erro número 1 de quem tenta rodar o script pela primeira vez. O Google retorna access_denied e você fica 30 minutos debugando sem entender o motivo.

Criar a Credencial OAuth 2.0 e obter CLIENT_ID e CLIENT_SECRET

Agora o passo que todo mundo estava esperando. Vá em APIs & Services → Credentials. Clique em "+ Create Credentials" → OAuth client ID.

  • Application type: Selecione "Desktop app" (ideal para scripts Python/Node rodando no seu computador).
  • Name: Algo como script-local-cqb.
  • Clique em Create.

Um modal vai aparecer mostrando o Client ID e o Client Secret. Copie ambos agora e guarde em local seguro — o Secret não aparece mais depois que você fechar essa tela (mas pode ser exibido novamente clicando no lápis da credencial).

# Estrutura dos valores que você vai copiar do Console:
CLIENT_ID     = "XXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com"
CLIENT_SECRET = "GOCSPX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

# Nunca compartilhe esses valores publicamente.
# Adicione-os como Secrets no GitHub Actions ou
# use variáveis de ambiente (.env) localmente.
⚠️ Segurança: Jamais cole o CLIENT_SECRET diretamente no código-fonte que vai para o repositório público. Use .env + .gitignore localmente, ou GitHub Secrets em pipelines de CI/CD.

Instalar a dependência Python

Com as credenciais em mãos, instale a biblioteca OAuth do Google no seu ambiente Python. Abra o terminal (cmd, PowerShell ou terminal Linux/Mac) e rode:

pip install google-auth-oauthlib

Se você usa ambientes virtuais (recomendado), ative o seu venv antes. Se preferir instalar sem conflitos de pacotes:

# Cria e ativa ambiente virtual (opcional mas recomendado)
python -m venv venv
source venv/bin/activate    # Linux/Mac
venv\Scripts\activate       # Windows

pip install google-auth-oauthlib

Criar e rodar o script de geração do Refresh Token

Crie um arquivo chamado setup_oauth.py na sua máquina local com o conteúdo abaixo. Substitua os placeholders pelos seus valores reais copiados no Passo 5. Defina também os scopes — as permissões que seu app vai solicitar. Escolha apenas os escopos que você realmente precisa; pedir escopos demais aumenta a chance de rejeição na revisão do Google.

Escopos mais usados:

https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/blogger https://www.googleapis.com/auth/gmail.send https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/calendar
"""
🔑 setup_oauth.py — Gerador de Refresh Token OAuth
Rode UMA VEZ no seu computador local.
Créditos: @CanalQb — canalqb.com.br
"""

from google_auth_oauthlib.flow import InstalledAppFlow

# ─── Substitua pelos seus valores do Google Cloud Console ───
CLIENT_ID     = "SEU_CLIENT_ID_AQUI"
CLIENT_SECRET = "SEU_CLIENT_SECRET_AQUI"

# ─── Defina apenas os escopos que você precisa ───
SCOPES = [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/youtube",
    # Adicione ou remova conforme necessário
    # "https://www.googleapis.com/auth/blogger",
    # "https://www.googleapis.com/auth/gmail.send",
]

client_config = {
    "installed": {
        "client_id":     CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "auth_uri":      "https://accounts.google.com/o/oauth2/auth",
        "token_uri":     "https://oauth2.googleapis.com/token",
        "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"],
    }
}

flow  = InstalledAppFlow.from_client_config(client_config, SCOPES)
creds = flow.run_local_server(port=0)

print("\n" + "="*60)
print("✅ AUTENTICAÇÃO OK — Guarde estes valores com segurança:")
print("="*60)
print(f"\nOAUTH_CLIENT_ID     : {CLIENT_ID}")
print(f"\nOAUTH_CLIENT_SECRET : {CLIENT_SECRET}")
print(f"\nOAUTH_REFRESH_TOKEN : {creds.refresh_token}")
print("\n" + "="*60)
print("⚠️  Guarde o refresh_token — ele não expira (até ser revogado).")
print("    Para revogar: https://myaccount.google.com/permissions")
print("="*60)

Para rodar: python setup_oauth.py. O navegador vai abrir automaticamente pedindo que você faça login e autorize o acesso. Após confirmar, o terminal imprime os três valores. Anote o refresh_token — ele não vai aparecer novamente se você rodar o script uma segunda vez sem revogar o acesso.

Insight Exclusivo @CanalQb: O refresh_token só é retornado na primeira autorização. Se você rodar o script de novo e o terminal mostrar refresh_token: None, vá em myaccount.google.com/permissions, revogue o acesso do seu app e rode novamente — aí o Google gera um novo token.

Guardar os valores com segurança (GitHub Secrets ou .env)

Com os três valores em mãos, nunca os coloque direto no código. Existem duas abordagens práticas:

Opção A — GitHub Actions Secrets (para CI/CD):

  • Vá no seu repositório → Settings → Secrets and variables → Actions.
  • Clique em "New repository secret" e crie três secrets:
  • OAUTH_CLIENT_ID · OAUTH_CLIENT_SECRET · OAUTH_REFRESH_TOKEN
  • No seu workflow .yml, acesse via: ${{ secrets.OAUTH_CLIENT_ID }}

Opção B — Arquivo .env (para uso local):

# .env — NUNCA faça commit deste arquivo (adicione ao .gitignore)
OAUTH_CLIENT_ID=seu_client_id_aqui
OAUTH_CLIENT_SECRET=seu_client_secret_aqui
OAUTH_REFRESH_TOKEN=seu_refresh_token_aqui
# No Python, carregue com python-dotenv:
pip install python-dotenv

from dotenv import load_dotenv
import os
load_dotenv()
CLIENT_ID     = os.getenv("OAUTH_CLIENT_ID")
CLIENT_SECRET = os.getenv("OAUTH_CLIENT_SECRET")
REFRESH_TOKEN = os.getenv("OAUTH_REFRESH_TOKEN")

Quais APIs do Google habilitar? Lista completa 2026

Aqui no @CanalQb, mapeamos todas as APIs populares do Google disponíveis no Cloud Console, validamos quais têm plano gratuito real (sem pegadinhas de cobrança inesperada no primeiro mês) e organizamos por categoria de uso. Todas as listadas como Grátis possuem cotas diárias ou mensais suficientes para automações pessoais e pequenos projetos — verificamos os planos na página oficial de preços do Google Cloud.

📁 Produtividade & Armazenamento

APIO que fazCota GrátisStatus
Google Drive API Upload, download, listagem, criação de pastas e compartilhamento de arquivos no Drive. Essencial para automações de backup e distribuição de arquivos. 15 GB storage / 1B req./dia Grátis
Google Sheets API Leitura e escrita em planilhas. Ótimo para dashboards, banco de dados simples e integração com automações de coleta de dados. 300 req./min Grátis
Google Docs API Criação e edição de documentos. Ideal para geração automática de relatórios, contratos e templates. 300 req./min Grátis
Google Forms API Criação e leitura de respostas de formulários. Permite automatizar pesquisas e captura de dados. 300 req./min Grátis
Google Slides API Geração automática de apresentações. Perfeito para relatórios visuais e pitch decks gerados por script. 300 req./min Grátis

📧 Comunicação

APIO que fazCota GrátisStatus
Gmail API Envio, leitura e organização de e-mails via código. Suporta threads, labels e busca avançada. Muito usado em automações de notificação e leitura de inbox. 1B unid./dia (uso pessoal) Grátis
Google Calendar API Criação, leitura e atualização de eventos no Calendar. Ideal para bots de agenda, lembretes automáticos e sincronização com outras ferramentas. 1M req./dia Grátis
Google Chat API Envio de mensagens e criação de bots no Google Chat (Workspace). Útil para notificações em equipe via webhook ou app. 3.000 req./min Grátis

🎬 Conteúdo & Publicação

APIO que fazCota GrátisStatus
YouTube Data API v3 Upload de vídeos, gerenciamento de playlists, leitura de métricas e comentários. A API mais usada pelos leitores do @CanalQb para automação de canais. 10.000 unid./dia Limitado
Blogger API Criação, edição e publicação de posts no Blogger via script. Permite automação completa de blogs hospedados no blogspot.com — sem abrir o painel. 10.000 req./dia Grátis
YouTube Analytics API Acesso a dados analíticos do canal: views, retenção, fontes de tráfego. Complementa a YouTube Data API para dashboards de desempenho. Incluso na cota YT Grátis
YouTube Reporting API Relatórios em bulk de dados do canal. Ideal para análise histórica e exportação de dados para planilhas. Incluso na cota YT Grátis

🔐 Identidade & Segurança

APIO que fazCota GrátisStatus
Google Identity Services Login com Google (Sign-In) para aplicações web e mobile. Substitui o OAuth manual para fluxos de autenticação de usuários finais. Ilimitado Grátis
People API Acesso a contatos do Google, perfil e informações de pessoas. Útil para integrações de CRM e sincronização de listas de contatos. 90 req./min Grátis
Admin SDK API Gerenciamento de usuários e grupos em domínios Google Workspace. Essencial para automações corporativas de TI. Varia por operação Workspace

🤖 Dados, IA & Análise

APIO que fazCota GrátisStatus
Google Analytics Data API (GA4) Consulta dados do seu Google Analytics 4 via código. Permite criar dashboards customizados, relatórios automatizados e alertas de tráfego. 200.000 req./dia Grátis
Search Console API Acessa dados do Google Search Console: cliques, impressões, CTR e posição média por query. Ótimo para monitoramento SEO automatizado. 1.200 req./min Grátis
Cloud Natural Language API Análise de sentimento, extração de entidades e classificação de texto. Útil para moderar comentários e categorizar conteúdo automaticamente. 5.000 unid./mês Limitado
Cloud Translation API Tradução automática de textos para 100+ idiomas. O plano gratuito cobre 500.000 caracteres/mês — suficiente para automações leves. 500k chars/mês Limitado
Cloud Vision API Reconhecimento de imagens: OCR, detecção de objetos, faces e textos em imagens. Perfeito para automações de moderação e extração de dados visuais. 1.000 unid./mês Limitado
Gemini API (Google AI Studio) Acesso aos modelos de IA generativa do Google (Gemini Pro, Flash). Geração de texto, código e imagens via API. Alternativa ao ChatGPT para automações. 60 req./min (Flash) Grátis
BigQuery API Data warehouse serverless. Consultas SQL em datasets massivos. O plano gratuito inclui 10 GB de armazenamento e 1 TB de processamento/mês. 1 TB queries/mês Limitado

🗺️ Localização & Mapas

APIO que fazCota GrátisStatus
Maps JavaScript API Mapas interativos em páginas web. Permite customizar totalmente o visual e adicionar marcadores, rotas e layers de dados. US$200 crédito/mês Crédito
Geocoding API Converte endereços em coordenadas (e vice-versa). Essencial para apps de logística, delivery e mapeamento de dados. US$200 crédito/mês Crédito
Places API Busca de estabelecimentos, avaliações e informações de locais. Base para apps de descoberta e recomendação geolocalizada. US$200 crédito/mês Crédito

🔥 Firebase & Backend

APIO que fazCota GrátisStatus
Firebase Realtime Database API Banco de dados NoSQL em tempo real. Ideal para apps com sincronização instantânea de dados entre clientes. O plano Spark é gratuito. 1 GB storage / 10 GB transfer Grátis
Firestore API Banco de dados NoSQL escalável e flexível. Mais robusto que o Realtime DB, com suporte a queries complexas e modo offline. 1 GB / 50k reads/dia Grátis
Firebase Cloud Messaging (FCM) Envio de notificações push para Android, iOS e Web de forma gratuita e ilimitada. Uma das APIs mais usadas em apps móveis. Ilimitado Grátis
Cloud Functions API Funções serverless acionadas por eventos. Escala automaticamente e cobra apenas por execução. O Free Tier inclui 2M invocações/mês. 2M invocações/mês Grátis
💡 Insight Exclusivo @CanalQb — O Truque dos Escopos Mínimos:

A maioria dos tutoriais pede o escopo https://www.googleapis.com/auth/drive (acesso total ao Drive). Mas se você só precisa fazer upload, use https://www.googleapis.com/auth/drive.file — ele dá acesso apenas aos arquivos criados pelo próprio app, não a todo o Drive. Isso reduz o risco de segurança e, no caso do YouTube, usar https://www.googleapis.com/auth/youtube.upload em vez de youtube completo evita que um token comprometido consiga deletar vídeos do canal. Validamos isso em produção nos nossos scripts do @CanalQb.

Dúvidas frequentes sobre OAuth Google

O refresh_token expira?

O refresh_token não tem prazo de validade fixo — ele só expira se você revogar o acesso manualmente em myaccount.google.com/permissions, se a senha da conta for alterada ou se o app ficar mais de 6 meses sem uso. Em produção, scripts que rodam diariamente nunca têm o token expirado.

Posso usar o mesmo CLIENT_ID em vários scripts?

Sim, mas não é recomendado para projetos diferentes. O ideal é criar uma credencial por projeto para facilitar o gerenciamento de permissões e revogar acessos de forma granular. Para múltiplos scripts dentro do mesmo projeto (ex: uploader do YouTube + poster do Blogger), uma única credencial funciona bem desde que os escopos abranjam ambas as APIs.

O que é o erro "This app isn't verified"?

Aparece quando você usa escopos sensíveis (como acesso total ao Gmail ou Drive) em apps ainda não revisados pelo Google. Para uso pessoal, clique em "Advanced" → "Go to [seu app] (unsafe)" na tela de consentimento. Para apps públicos, você precisará passar pela revisão oficial do Google — processo que pode levar semanas e exige política de privacidade pública.

Precisa de cartão de crédito para usar as APIs gratuitas?

Depende da API. As APIs de produtividade (Drive, Sheets, Gmail, Blogger, YouTube) não exigem cartão para uso dentro das cotas gratuitas. Já as APIs do Google Maps e algumas APIs de IA exigem um método de pagamento cadastrado, pois o billing é baseado em uso além do crédito mensal gratuito de US$200. O Google avisa antes de cobrar — mas sempre defina um orçamento máximo no console para evitar surpresas.

Como usar o refresh_token no GitHub Actions?

Adicione os três valores (CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN) como Repository Secrets em Settings → Secrets and variables → Actions. No workflow YAML, referencie-os como ${{ secrets.OAUTH_CLIENT_ID }} e passe como variáveis de ambiente para o step Python. No script, carregue via os.environ.get(). Nunca use echo para imprimir secrets no log — o GitHub mascara automaticamente, mas é boa prática evitar.

Conclusão: você agora tem acesso ao ecossistema completo do Google

Depois de seguir este guia você tem em mãos os três componentes que desbloqueiam praticamente qualquer automação dentro do universo Google: o CLIENT_ID que identifica seu app, o CLIENT_SECRET que autentica ele, e o refresh_token que mantém a sessão ativa indefinidamente sem precisar logar de novo. Com as APIs da tabela acima habilitadas, você consegue publicar no Blogger, fazer upload no YouTube, ler e escrever no Drive, enviar e-mails pelo Gmail e muito mais — tudo pelo terminal ou por GitHub Actions, sem abrir nenhum painel manualmente.

Este script foi otimizado para os leitores do canalqb.com.br com base em erros reais que cometemos durante a configuração de pipelines automatizados. O próximo passo natural é integrar esses tokens nos seus workflows de automação — temos tutoriais detalhados de upload automático no YouTube e publicação automática no Blogger. Explore o blog para os próximos passos.

⚠️ Aviso de Segurança: Nunca exponha credenciais OAuth em repositórios públicos, prints de tela ou grupos de suporte. Um CLIENT_SECRET comprometido permite que terceiros façam requisições em seu nome. Em caso de vazamento, revogue imediatamente a credencial no Google Cloud Console e gere uma nova.


Feito com Master Rules Claude v5 · @CanalQb · canalqb.com.br

Marcadores: Airdrop Banco de Dados Blogger Cripto IA Jogos Python Script Sistemas Tutorial

© abril 19, 2026 CanalQb — Python, Scripts, Automação, Airdrops e Criptomoedas | Web3 e Tech na Prática

Comentários