Para clientes que soportan el flujo (Claude.ai, el directorio de conectores de Anthropic), Oktopus expone un Authorization Server OAuth 2.1 completo. No hace falta pegar API keys: el usuario inicia sesión y autoriza scopes en una pantalla de consentimiento.
Endpoints
| |
|---|
| Authorization | https://www.oktopus.lat/api/oauth/authorize |
| Token | https://www.oktopus.lat/api/oauth/token |
| Registro (DCR, RFC 7591) | https://www.oktopus.lat/api/oauth/register |
| Revocación (RFC 7009) | https://www.oktopus.lat/api/oauth/revoke |
| Metadata del AS (RFC 8414) | /.well-known/oauth-authorization-server |
| Metadata del recurso (RFC 9728) | /.well-known/oauth-protected-resource |
Cómo funciona el flujo
- El cliente se registra por DCR (
POST /api/oauth/register) — los redirect_uri están limitados a los callbacks de Claude y a loopback (http://127.0.0.1:<puerto>/callback).
GET /api/oauth/authorize con PKCE S256 obligatorio y resource=https://www.oktopus.lat/api/mcp (RFC 8707).
- El usuario inicia sesión en Oktopus y aprueba los scopes en la pantalla de consentimiento.
- El cliente canjea el
code en POST /api/oauth/token (con code_verifier) → recibe access_token (1 h) + refresh_token.
- Usa el access token contra el MCP:
Authorization: Bearer okto_oauth_....
Scopes disponibles
mcp:invoke · orders:create · orders:read · orders:write · products:read · products:write · landings:read · landings:write · stores:read · stores:write · whatsapp:write
ai:generate (generación de imágenes/video con IA) está fuera del conector OAuth por diseño.
Seguridad
- PKCE S256 obligatorio — sin
code_challenge no hay flujo; plain se rechaza.
- Audiencia validada — el token solo sirve para el MCP (
resource), fail-closed.
- Codes single-use (60 s, consumo atómico — un replay falla).
- Refresh rotation con detección de reuso: si un refresh ya rotado se reusa, se revoca toda la familia de tokens.
- Allowlist de redirects — no se puede registrar un cliente con un callback arbitrario (anti-phishing).
- Errores OAuth genéricos (
invalid_grant) — sin filtración de internals.