Saltar al contenido principal

OAuth y seguridad

agents2.me implementa OAuth 2.1 con PKCE para el MCP. No hay contraseña de aplicación, clave estática ni token de larga duración compartido — el asistente recibe tokens que pertenecen a una persona.

Endpoints​

RutaFunción
/.well-known/oauth-protected-resourceMetadatos del recurso protegido (/mcp)
/.well-known/oauth-authorization-serverMetadatos del servidor de autorización
/oauth/authorizeInicio del flujo; valida client_id, redirect_uri y PKCE
/oauth/authorize/request/:idConsulta de la solicitud pendiente, para la pantalla de consentimiento
/oauth/authorize/decisionRegistro de la decisión (aprobar o rechazar)
/oauth/tokenIntercambio del código por el par de tokens y renovación por refresh token
/oauth/revokeRevocación del token
/mcpEl endpoint MCP propiamente dicho
/mcp/connectionsLista (GET) y revoca (DELETE) las conexiones del usuario

Identificación del cliente​

No existe registro dinámico de clientes. El client_id es una URL https canónica que apunta al documento de metadatos del propio cliente (el estándar CIMD). agents2.me:

  1. valida que el client_id es una URL https canónica, con ruta;
  2. busca el documento del cliente con protección contra SSRF, límite de 64 KB y timeout de 5 s;
  3. extrae el nombre del cliente y la lista de redirect URIs permitidas;
  4. guarda en caché por 1 hora.

Por eso el asistente debe publicar su propio documento de metadatos — así la pantalla de consentimiento muestra un nombre confiable en lugar de una URL cualquiera.

Tokens​

TokenFormatoValidez
Accesoa2m_at_…1 hora
Renovación (refresh)a2m_rt_…30 días, con rotación
  • Los tokens se guardan solo como hash — ni agents2.me puede imprimir el valor después de emitido.
  • La renovación es rotativa: cada uso del refresh token genera uno nuevo e invalida el anterior (con una ventana de tolerancia para peticiones concurrentes).
  • El código de autorización vive 60 segundos; la solicitud de consentimiento, 10 minutos.
  • El token va siempre en el encabezado Authorization: Bearer Un token en la query string no se acepta — eso evita que aparezca en los logs.

Límites y protecciones​

ProtecciónRegla
Llamadas por conexión120 por minuto
Fallos de autenticación por IP600 por minuto (solo cuentan los tokens inválidos)
Tamaño del cuerpo4 MB — suficiente para una multimedia de hasta 2 MB en base64
OrigenLas peticiones con Origin solo se aceptan si el origen es de la propia app (los asistentes llaman de servidor, sin Origin)
Respuestas de rechazo401 con WWW-Authenticate apuntando a los metadatos; 429 al superar el límite; 403 para origen no permitido

Permisos​

El asistente hereda al usuario, no a la empresa. Consecuencias:

  1. Toda herramienta corre con el perfil del usuario que autorizó el acceso.
  2. Desactivar al usuario invalida el acceso del asistente.
  3. Cambiar el perfil del usuario cambia — de inmediato — lo que el asistente puede hacer.

Auditoría​

Las llamadas MCP se registran como llamadas autenticadas, con identificación de la conexión, del usuario y del horario (sin el contenido de los tokens, que nunca son legibles). La lista de conexiones activas, el último uso y la revocación quedan en Configuración → Apps conectadas.

Buenas prácticas​

  1. Trata el consentimiento como tratas un inicio de sesión: lee el nombre del cliente antes de aprobar.
  2. Revoca las conexiones que no reconozcas.
  3. Prefiere un usuario dedicado (con perfil restringido) cuando la automatización sea de un servicio, no de una persona.
  4. No está permitido compartir tokens entre asistentes: cada uno hace su propio flujo.