Una superficie de edicion en vivo necesita su propia credencial estrecha y caducable
Ya conoces la credencial interna que esta flota usa para que un servicio se autentique ante otro: un registro Bearer, emitido por consumidor de API, con sus propios ajustes y cacheado con un TTL que respeta su expiración real. Esa es la forma correcta para un job de api-server llamando a api-license. Es la forma equivocada para el navegador de un cliente, sentado en un sitio generado y en vivo, llamando de vuelta a la plataforma para guardar una edición.
La frontera de confianza es distinta en tipo, no en grado. Un token interno autentica un servicio que escribiste tú, sobre infraestructura que controlas, llamando a otro servicio que también escribiste tú. Una sesión de edición en vivo autentica una pestaña de navegador, en un dispositivo que nunca has visto, que un cliente abrió pulsando un enlace. Reutilizar la credencial interna para eso pondría el mismo secreto que permite a api-server hablar con api-license en una cadena de consulta en internet público. El sistema editable no hace eso: emite un token hecho a propósito, uno que demuestra exactamente una cosa —«este navegador puede editar este único sitio, ahora mismo»— y nada más.
// app/Livewire/Editable.php (baked in by webplo:install-editable)
public function mount(): void
{
$this->siteId = Config::string('services.site.id');
if (request('token')) {
$this->token = request()->string('token')->value();
$this->token_is_valid = $this->isTokenValid();
}
}
Al montarse, el componente lee un parámetro token y lo comprueba de inmediato contra la plataforma antes de fiarse de él para nada. No decide la validez localmente: se lo pregunta al único servicio que posee la respuesta.
Fíjate en lo que el token lleva y en lo que no. Ninguna identidad de cliente, ninguna contraseña, nada reutilizable entre sitios: sólo el alcance justo para hacer un trabajo. Una bandera de validez decide si se desbloquea la interfaz de edición, una URL de retorno firmada permite que una edición guardada avise al panel, y una única bandera de derecho, no un objeto de permisos general. El componente nunca asume que la validez de ayer sigue valiendo: comprueba en cada carga, y cuando el comerciante termina llama de vuelta para expirar el token explícitamente, así que un enlace filtrado o guardado en marcadores deja de funcionar en cuanto acaba la sesión en lugar de seguir vivo hasta una expiración fija.
Eso generaliza más allá de esta funcionalidad: cuando un artefacto generado que no controlas del todo necesita llamar de vuelta a tu plataforma, dale una credencial acotada exactamente a esa llamada, de vida corta, revocable de forma independiente y validada en cada uso, no la misma clase que usan tus propios servicios para confiar entre sí. El token interno responde a «¿cuál de mis servicios es este?». Este responde a una pregunta más estrecha y más difícil: «¿sigue teniendo permiso esta sesión concreta, temporal y en manos de un navegador para hacer esta única cosa, ahora mismo?». Responde a las dos con la misma credencial y habrás ampliado calladamente tu frontera de confianza interna para incluir cada pestaña que un cliente haya abierto jamás.
Cerrar el bucle
Tres niveles, un instalador, un despliegue que honestamente son dos pasos, una caché que no sabe que tu arreglo ocurrió hasta que se lo dices, una credencial con la forma de la frontera que realmente cruza. Nada de eso es exótico. Es lo que parece «una API bien construida» una vez la multiplicas por una flota y le entregas un trozo al navegador de un cliente.
- Distribución
- [X] Divide un sistema de artefactos generados en un esqueleto, un paquete versionado y un alojamiento de recursos estáticos, cada uno con su cadencia
- [X] Deja que el paquete se instale solo mediante su propio comando de Artisan, protegido e idempotente, en lugar de con ficheros copiados a mano
- Despliegue
- [X] Trata «etiquetado» y «ha llegado a cada instancia activa» como dos hechos separados y seguidos por separado
- [X] Subir la restricción de versión y redesplegar es un paso explícito, no un efecto secundario asumido de etiquetar
- Cacheo
- [X] Invalida explícitamente cualquier caché de ejecución persistente cuando un arreglo toque la carga de configuración, y prueba la lectura justo después de la escritura
- Fronteras de confianza
- [X] Dale a una superficie de edición en vivo su propia credencial estrecha, caducable y validada por la plataforma, nunca la interna entre servicios
Una flota no es una API ejecutándose muchas veces. Es la disciplina de una API, puesta a prueba contra cada sitio donde esa disciplina podría dejar de aplicarse calladamente. Publica el patrón una vez, y sostenlo en todos los sitios donde corre.