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
| Caminho | Função |
|---|---|
/.well-known/oauth-protected-resource | Metadados do recurso protegido (/mcp) |
/.well-known/oauth-authorization-server | Metadados do servidor de autorização |
/oauth/authorize | Início do fluxo; valida client_id, redirect_uri e PKCE |
/oauth/authorize/request/:id | Consulta do pedido pendente, para a tela de consentimento |
/oauth/authorize/decision | Registro da decisão (aprovar ou recusar) |
/oauth/token | Troca do código pelo par de tokens e renovação por refresh token |
/oauth/revoke | Revogação do token |
/mcp | O endpoint MCP propriamente dito |
/mcp/connections | Lista (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:
- valida que o
client_idé uma URL https canônica, com caminho; - busca o documento do cliente com proteção contra SSRF, limite de 64 KB e timeout de 5 s;
- extrai o nome do cliente e a lista de redirect URIs permitidas;
- 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
| Token | Formato | Validade |
|---|---|---|
| Acesso | a2m_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ção | Regra |
|---|---|
| Chamadas por conexão | 120 por minuto |
| Falhas de autenticação por IP | 600 por minuto (só tokens inválidos contam) |
| Tamanho do corpo | 4 MB — suficiente para uma mídia de até 2 MB em base64 |
| Origem | Requisições com Origin só são aceitas se a origem for do próprio app (assistentes chamam de servidor, sem Origin) |
| Respostas de recusa | 401 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:
- Toda ferramenta roda com o perfil do usuário que autorizou o acesso.
- Desativar o usuário invalida o acesso do assistente.
- 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
- Trate o consentimento como você trata um login: leia o nome do cliente antes de aprovar.
- Revogue conexões que você não reconhece.
- Prefira um usuário dedicado (com perfil restrito) quando a automação for de um serviço, não de uma pessoa.
- Não é permitido compartilhar tokens entre assistentes: cada um faz o próprio fluxo.