Autenticación de la API
Qué es esto
La API de ComStack acepta tres tipos de credenciales. Cuál utilizar depende de quién realiza la llamada y desde dónde.
| Cliente | Credencial | Notas |
|---|---|---|
| Asistentes IA vía MCP (Claude, Cursor) | OAuth 2.1 Bearer | Enrutamiento de proyecto por herramienta. |
| Servicios headless y CI vía MCP | Cabeceras x-api-key + x-project-id | Limitado a un proyecto. |
| Portal web, extensión Chrome, voz en vivo | Firebase ID Token (Authorization: Bearer) | Usado por SPAs del dashboard y voz en vivo. |
Cómo funciona
OAuth 2.1 (para clientes de agentes de IA)
OAuth 2.1 con PKCE (RFC 7636) y Registro Dinámico de Clientes (RFC 7591):
- Descubrimiento —
GET /.well-known/oauth-authorization-serverdevuelve las URLs de los endpoints y el método PKCE soportado (S256). - Registro —
POST /oauth/registerregistra el cliente y devuelve unclient_id. Sin secreto de cliente. - Autorización —
GET /oauth/authorizemuestra la página de inicio de sesión de Firebase Auth. - Emisión de código —
POST /oauth/authorize/completeemite un código de autorización tras el inicio de sesión. - Intercambio de token —
POST /oauth/tokendevuelve un token de acceso (TTL de 1 hora) y un token de actualización (TTL de 30 días). - Uso — cada
POST /mcpincluyeAuthorization: Bearer <access_token>.
Los tokens de actualización se rotan automáticamente en cada uso. Presentar un token de actualización previamente rotado revoca toda la familia de tokens (protección contra ataques de repetición).
Claves API (para clientes máquina)
Ambas cabeceras son obligatorias en cada solicitud POST /mcp:
x-api-key: <raw_key>x-project-id: <project_id>Las claves están limitadas a un solo proyecto. Un argumento project_id que no coincida con el alcance de la clave devuelve InvalidRequest. Las claves de servicio son la ruta recomendada a largo plazo para clientes headless.
Token de ID de Firebase (dashboard, extensión de Chrome)
Todas las rutas /api/* utilizan JWTs de Firebase Auth en Authorization: Bearer <token>. El token caduca después de 1 hora. Actualízalo usando user.getIdToken(true).
El middleware basado en roles verifica la pertenencia al proyecto en cada solicitud. Se aplica el rol mínimo requerido por el endpoint: manager para operaciones destructivas, cualquier miembro para lecturas.
Cuándo usar cada uno
- OAuth: Integración orientada a humanos donde el usuario inicia sesión; la ruta estándar para Claude y Cursor.
- Clave API: Pipelines de CI, tareas programadas, integraciones servidor a servidor.
- Token de Firebase: Interfaz web personalizada construida sobre Firebase Auth.
Parámetros / campos / entradas
Resumen del endpoint OAuth:
| Endpoint | Método | Propósito |
|---|---|---|
/.well-known/oauth-authorization-server | GET | Descubrimiento de metadatos |
/.well-known/oauth-protected-resource | GET | Metadatos de recursos protegidos |
/oauth/register | POST | Registro de cliente — devuelve client_id |
/oauth/authorize | GET | Página de inicio de sesión de Firebase |
/oauth/authorize/complete | POST | Emite código de autorización |
/oauth/token | POST | Intercambio de código o token de actualización |
Ejemplo
Usando una clave API para llamar a la herramienta MCP get-project-state:
curl -X POST https://api.comstack.ai/mcp \ -H "Content-Type: application/json" \ -H "x-api-key: your-api-key" \ -H "x-project-id: your-project-id" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "get-project-state", "arguments": { "project_id": "your-project-id" } } }'Errores comunes
401 invalid_token — token de acceso caducado o desconocido. Usa el token de actualización mediante POST /oauth/token para obtener uno nuevo.
401 invalid_api_key — clave API no encontrada o revocada. Regénérala desde la configuración del proyecto.
403 Forbidden — autenticado pero con rol insuficiente para la operación solicitada.
403 (scope mismatch) — la cabecera x-project-id no coincide con el argumento project_id en la llamada a la herramienta.
429 Too Many Requests — los endpoints OAuth están limitados a 30 req/min/IP; los fallos de autenticación están limitados a 10/min/IP.
Relacionado
- Servidor MCP — cómo los agentes de IA se conectan y enrutan las llamadas a herramientas
- OAuth MCP — modelo de almacenamiento OAuth, TTLs de tokens, rotación de actualización
- Seguridad MCP — modelo de amenazas y controles de seguridad
- Permisos — roles y qué puede hacer cada uno