The hybrid pattern most multi-tenant apps land on
Short-lived JWT access tokens (15–60 minutes) for fast distributed verification. Long-lived refresh tokens (days to weeks) stored server-side, in a revocation-capable database. The frontend silently exchanges the refresh token for a new access token before the access token expires.
This gives you near-instant revocation (≤access-token-lifetime) without the per-request DB hit. Logout is "delete the refresh token + clear the access token from the browser". Permission changes propagate within one access-token lifetime.