Contexto auditado
T3 Connect usa token exchange, scopes por capacidad, access tokens DPoP de 30 minutos y replay storage para cada proof. El entorno emite tickets WebSocket breves y de propósito único. Referencias: Environment Authentication Profile, RelayTokens, DpopProofs y managedRelay client.
Se comparó contra Brio main y contra 967f4e5610f631bac9e4b9e69b07d956185491ca.
Brecha actual
Brio mejoró el transporte del secreto al mover tokens WebSocket del query string a un subprotocol role-bound, pero los tokens de device y connector siguen siendo bearer de larga vida. Quien obtiene uno puede reproducirlo hasta revocación. Tampoco hay scopes por operación, proof-of-possession, expiración corta, replay ledger ni ticket específico para abrir WebSocket.
Propuesta
- Definir scopes Relay separados, como
agent:list, agent:connect, agent:manage, device:manage y activity:publish.
- Intercambiar la sesión de identidad por access tokens cortos ligados a una clave DPoP del dispositivo.
- Verificar
htu, htm, iat, jti, thumbprint y ath; consumir el jti de forma atómica en almacenamiento compartido.
- Emitir tickets WebSocket single-purpose, de pocos minutos y ligados a agent/device/role.
- Mantener credenciales de connector y claves privadas en keychain/SecureStore/archivo 0600 según plataforma.
- Refrescar antes de expirar, clasificar errores de auth como bloqueados y despertar el supervisor cuando cambie la credencial.
- Hacer cutover explícito y revocar sesiones legacy; no mapear silenciosamente permisos antiguos a scopes nuevos.
- Mantener respuestas de credenciales con
Cache-Control: no-store y sin secretos en logs/traces.
Criterios de aceptación
- Un access token robado no funciona sin la clave DPoP.
- Reutilizar el mismo proof falla incluso contra otra réplica.
- Un token de lectura no puede unlink, recover, registrar devices ni abrir un túnel con otro role/agent.
- Los tickets WebSocket expiran y no pueden reutilizarse.
- Revocar device, unlink agent o rotar connector corta REST y sockets activos.
- Mobile renueva tokens sin interrumpir una sesión sana y presenta reautenticación accionable si no puede.
- Hay pruebas de replay, clock skew, scope escalation, wrong audience/URL/method, token theft, rotation y migración legacy.
Issue de ejecución enfocada para el objetivo amplio de #5.
Contexto auditado
T3 Connect usa token exchange, scopes por capacidad, access tokens DPoP de 30 minutos y replay storage para cada proof. El entorno emite tickets WebSocket breves y de propósito único. Referencias: Environment Authentication Profile, RelayTokens, DpopProofs y managedRelay client.
Se comparó contra Brio
mainy contra967f4e5610f631bac9e4b9e69b07d956185491ca.Brecha actual
Brio mejoró el transporte del secreto al mover tokens WebSocket del query string a un subprotocol role-bound, pero los tokens de device y connector siguen siendo bearer de larga vida. Quien obtiene uno puede reproducirlo hasta revocación. Tampoco hay scopes por operación, proof-of-possession, expiración corta, replay ledger ni ticket específico para abrir WebSocket.
Propuesta
agent:list,agent:connect,agent:manage,device:manageyactivity:publish.htu,htm,iat,jti, thumbprint yath; consumir eljtide forma atómica en almacenamiento compartido.Cache-Control: no-storey sin secretos en logs/traces.Criterios de aceptación
Issue de ejecución enfocada para el objetivo amplio de #5.