OAuth 2.0
Authorization Code con PKCE para clientes loopback; Device Authorization Grant para hosts que no pueden enlazar localhost; intercambio en `/api/oauth/token`, llamadas a `/api/v1` con el token de acceso.
Los clientes de terceros y oficiales usan OAuth 2.0. Authorization Code + PKCE es el valor predeterminado para apps de escritorio que pueden abrir un navegador y escuchar un redirect en loopback. Device Authorization Grant se usa cuando el host no puede enlazar 127.0.0.1 (Photoshop UXP). Se admiten clientes confidenciales con client_secret para apps de servidor registradas por los propietarios del espacio de trabajo.
Flujo de cliente público (Lightroom / Capture One)
1. Plugin opens browser → GET /oauth/authorize?client_id=…&code_challenge=…&redirect_uri=…&scope=…
2. User logs in (if needed) → consent screen (scopes + workspace)
3. Redirect to loopback → ?code=…
4. POST /api/oauth/token (code + code_verifier) → access + refresh tokens
5. API calls → Authorization: Bearer aist_at_…
Los clientes de escritorio usan un redirect en loopback (p. ej. http://127.0.0.1:54321/callback) registrado en la aplicación OAuth. Los clientes públicos no incrustan un client_secret.
Flujo Device Code (Photoshop)
1. Plugin POST /api/oauth/device_authorization → device_code + user_code + verification_uri
2. Plugin opens browser → /oauth/device (user enters code, signs in, consents)
3. Plugin polls POST /api/oauth/token (grant_type=urn:ietf:params:oauth:grant-type:device_code)
4. On approval → access + refresh tokens
5. API calls → Authorization: Bearer aist_at_…
Ver Photoshop para la instalación y el recorrido de Connect.
Endpoints
| Método | Ruta | Función |
|---|---|---|
| GET | /oauth/authorize | Página de consentimiento (Authorization Code + PKCE) |
| GET | /oauth/device | UI de verificación / consentimiento Device Code |
| POST | /api/oauth/device_authorization | Iniciar Device Authorization Grant |
| POST | /api/oauth/token | Intercambiar code, device_code o refresh token |
| POST | /api/oauth/revoke | Revocar access o refresh token |
Clientes de plataforma frente a personalizados
| Nivel | Quién registra | Panel |
|---|---|---|
| Plataforma | Operaciones de ArtInStack (oauth_clients en Directus) | El usuario ve la app en Apps conectadas tras el consentimiento |
| Espacio de trabajo | Propietario del espacio de trabajo | Ajustes → Desarrollador → Aplicaciones OAuth |
Lightroom, Capture One y Photoshop oficiales usan filas de cliente propiedad de la plataforma. Los fotógrafos no las registran ellos mismos.
Actualización (refresh)
Usa el refresh token en /api/oauth/token antes de que expire el access token. Serializa el refresh en el cliente para evitar carreras durante subidas concurrentes.
