Revocación
Qué le ocurre a una suscripción abierta cuando termina una sesión, cambia una membresía o se revoca un permiso, y cómo debe reaccionar un cliente.
- Disponibilidad: Planificado
- Evidencia: Leído del código fuente
- Explicación
El problema
Comprobar el acceso cuando alguien se une a un canal no alcanza. Una persona puede ser eliminada de una organización, perder un rol o cerrar sesión mientras una suscripción está abierta. Si no ocurriera nada más, esa suscripción seguiría recibiendo eventos sobre recursos que la persona ya no puede ver.
Qué hace el servicio
Cuando cambia una sesión, una membresía o un permiso, el servicio vuelve a evaluar las suscripciones afectadas en lugar de esperar a que terminen:
- Publica
access.revokeden cada canal afectado. El evento esimmediate: nunca se retrasa ni se agrupa. - El transporte cierra la suscripción.
- A partir de ese momento la API de administración responde
403 ACCESS_REVOKEDa esa sesión o a ese permiso, y404 NOT_FOUNDpara los recursos que quien llama ya no puede ver. Las instantáneas y las reproducciones se rechazan de la misma manera, de modo que una suscripción cerrada no se puede reemplazar con consultas periódicas.
Los permisos de tiempo real son de corta duración a propósito. Aunque se perdiera un aviso de revocación, un permiso que no se renueva termina por sí solo, y renovarlo exige una nueva comprobación de acceso.
Qué hace un cliente
| Recibes | Haz esto |
|---|---|
access.revoked en un canal |
Deja de aplicar eventos de ese canal, descarta el estado que tienes de ese ámbito y sal del canal. No te reconectes en bucle. |
403 ACCESS_REVOKED en cualquier solicitud |
La sesión o el permiso terminó. Inicia sesión de nuevo, o avísale a la persona que su acceso cambió. |
404 NOT_FOUND para algo que estabas observando |
Considéralo inexistente. El servicio no indica si fue eliminado u ocultado. |
| Tu permiso está por vencer | Solicita un permiso nuevo antes de expires y vuelve a unirte con él |
Límites
La revocación es acotada, no instantánea: hay una ventana breve entre el cambio y el cierre de la suscripción. No envíes por eventos nada que sea perjudicial ver durante esa ventana. Para empezar, el servicio nunca pone credenciales, tokens ni datos de otra organización en los eventos ni en los registros.
Los invitados de aplicaciones privadas tienen acceso de entrega a una aplicación. No tienen sesión de administración ni la capacidad events.subscribe, así que nunca se unen a estos canales. Cómo se revoca el acceso de entrega de un invitado se explica en Acceso privado.