Pular para o conteúdo principal

OAuth e segurança

O agents2.me implementa OAuth 2.1 com PKCE para o MCP. Não há senha de aplicação, chave estática nem token de longa duração compartilhado — o assistente recebe tokens que pertencem a uma pessoa.

Endpoints​

CaminhoFunção
/.well-known/oauth-protected-resourceMetadados do recurso protegido (/mcp)
/.well-known/oauth-authorization-serverMetadados do servidor de autorização
/oauth/authorizeInício do fluxo; valida client_id, redirect_uri e PKCE
/oauth/authorize/request/:idConsulta do pedido pendente, para a tela de consentimento
/oauth/authorize/decisionRegistro da decisão (aprovar ou recusar)
/oauth/tokenTroca do código pelo par de tokens e renovação por refresh token
/oauth/revokeRevogação do token
/mcpO endpoint MCP propriamente dito
/mcp/connectionsLista (GET) e revoga (DELETE) as conexões do usuário

Identificação do cliente​

Não existe registro dinâmico de clientes. O client_id é uma URL https canônica que aponta para o documento de metadados do próprio cliente (o padrão CIMD). O agents2.me:

  1. valida que o client_id é uma URL https canônica, com caminho;
  2. busca o documento do cliente com proteção contra SSRF, limite de 64 KB e timeout de 5 s;
  3. extrai o nome do cliente e a lista de redirect URIs permitidas;
  4. guarda em cache por 1 hora.

Por isso o assistente precisa publicar o próprio documento de metadados — é assim que a tela de consentimento mostra um nome confiável em vez de uma URL qualquer.

Tokens​

TokenFormatoValidade
Acessoa2m_at_…1 hora
Renovação (refresh)a2m_rt_…30 dias, com rotação
  • Os tokens são guardados apenas como hash — nem o agents2.me consegue imprimir o valor depois de emitido.
  • A renovação é rotativa: cada uso do refresh token gera um novo e invalida o anterior (com uma janela de tolerância para requisições concorrentes).
  • O código de autorização vive 60 segundos; o pedido de consentimento, 10 minutos.
  • O token vai sempre no cabeçalho Authorization: Bearer. Um token na query string não é aceito — isso evita que ele apareça em logs.

Limites e proteções​

ProteçãoRegra
Chamadas por conexão120 por minuto
Falhas de autenticação por IP600 por minuto (só tokens inválidos contam)
Tamanho do corpo4 MB — suficiente para uma mídia de até 2 MB em base64
OrigemRequisições com Origin só são aceitas se a origem for do próprio app (assistentes chamam de servidor, sem Origin)
Respostas de recusa401 com WWW-Authenticate apontando os metadados; 429 ao passar do limite; 403 para origem não permitida

Permissões​

O assistente herda o usuário, não a empresa. Consequências:

  1. Toda ferramenta roda com o perfil do usuário que autorizou o acesso.
  2. Desativar o usuário invalida o acesso do assistente.
  3. Mudar o perfil do usuário muda — imediatamente — o que o assistente consegue fazer.

Auditoria​

As chamadas MCP são registradas como chamadas autenticadas, com identificação da conexão, do usuário e do horário (sem o conteúdo dos tokens, que nunca são legíveis). A lista de conexões ativas, o último uso e a revogação ficam em Configurações → Apps conectados.

Boas práticas​

  1. Trate o consentimento como você trata um login: leia o nome do cliente antes de aprovar.
  2. Revogue conexões que você não reconhece.
  3. Prefira um usuário dedicado (com perfil restrito) quando a automação for de um serviço, não de uma pessoa.
  4. Não é permitido compartilhar tokens entre assistentes: cada um faz o próprio fluxo.