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:

  1. Publica access.revoked en cada canal afectado. El evento es immediate: nunca se retrasa ni se agrupa.
  2. El transporte cierra la suscripción.
  3. A partir de ese momento la API de administración responde 403 ACCESS_REVOKED a esa sesión o a ese permiso, y 404 NOT_FOUND para 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.