Aviso contextual del permiso Local Network Access del Local Agent
Descripción General
Desde Edge 143 / Chromium reciente, cuando CreaRack (pública, en crearack.com) se conecta por primera vez con el Local Agent instalado en localhost:5050 del usuario, el navegador pide permiso de seguridad: “acceder a otras aplicaciones y servicios en este dispositivo”.
Este permiso es legítimo y necesario: CreaRack necesita hablar con el Agente para gestionar los dispositivos de red del cliente. Pero sin contexto, el prompt del navegador asusta.
El Problema
- El prompt del navegador no se puede eliminar ni disfrazar — es una decisión de seguridad del motor (Edge, Chromium), que clasifica por IP de destino (
127.0.0.1), no por nombre de host. Incluso un alias alocalhostsaltaría igual. - Sin contexto es confuso: el usuario ve un aviso técnico sobre “otras aplicaciones” sin saber que se refiere a su propio Agente.
- Impacta la confianza: algunos usuarios niegan el permiso por desconocimiento, rompiendo la integración.
La Solución: agent_lna_notice.js
Nuevo módulo JavaScript que contextualiza el prompt del navegador antes de que aparezca:
- Muestra un aviso propio (vía Permissions API) explicando qué es la conexión y que es segura.
- Solo en páginas que usan el Agent (dashboard, editor, terminal, monitoreo, etc.) — espeja
_AGENT_PATHSdedashboard_widgets.js. - Una vez por sesión: si el usuario lo cierra, no insiste hasta que reabra el navegador. El permiso concedido lo silencia para siempre.
- No-op en navegadores sin LNA: Firefox, Edge < 143, etc. no tienen soporte para este permiso, así que el módulo detecta y sale sin hacer nada.
- No toca el sondeo del Agent: el indicador de salud (
health_badge) sigue dependiendo solo del Agente mismo, no degrada.
Componentes Técnicos
Módulo: static/js/modules/agent_lna_notice.js
Función pública: maybeShowNotice()
Detecta vía navigator.permissions.query({ name: 'local-network-access' }) si el estado es prompt. Si es así, renderiza el aviso.
Métodos internos:
showNotice()— crea el elemento DOM del aviso (fijo abajo-derecha, max 380px).dismiss()— cierra el aviso y marcasessionStorage['lna_notice_dismissed'] = '1'.
Estilos: .lna-notice, .lna-notice-title, .lna-notice-body en static/css/components.css.
Integración: <script src="...agent_lna_notice.js" defer> en templates/base.html.
Características
| Aspecto | Detalle |
|---|---|
| Patrón | Microsoft Permissions API — recomendado por Edge para LNA |
| Scope | Solo rutas que contactan Agente (/, /editor, /terminal, /monitoring, /wireless, /maps, /blueprints) |
| Persistencia | Sesión (sessionStorage), no cookie |
| Animación | Slide-in 0.3s, fade-out 0.4s |
| Responsive | Acomoda en móviles (left/right 12px en <480px) |
| Accesibilidad | role="status", botón “Entendido” con title |
Impacto del Usuario
- Primera vez: ve el aviso explicativo antes del prompt nativo. Entiende que es su Agente, pulsa “Permitir”.
- Ya concedido: nada cambia, el Agente funciona como siempre.
- Navegador sin LNA: sin aviso, sin prompt — transparente.
Referencias Técnicas
- Microsoft Docs: https://learn.microsoft.com/deployedge/ms-edge-local-network-access
- Archivo de referencia:
Documentation/backend/LOCAL_AGENT.md(sección “Seguridad”) - CSP Middleware:
core/middleware/csp.py(definición de_AGENT_PREFIXES,_AGENT_EXACTpara sondeo) - Dashboard Widgets:
static/js/dashboard_widgets.js(definición de_AGENT_PATHSespejada aquí)
Véase también
- [[entity—core—module—agent-lna-notice]]
- [[crearack—terminal—local-agent]]
- [[concept—saas—security]]
- [[feature—core—dashboard-widgets]]
- [[entity—core—middleware—csp]]