Security
| Page | Read it when |
|---|---|
| Security posture | You want what is actually enforced, including the single cookie in the system. |
| Threat model | You are adding a trust boundary, or crossing one. |
| Token policy | You are touching access or refresh tokens. Normative for every apps/* component. |
| Secrets | You are adding configuration that must not appear in a log or an image layer. |
| Pentest checklist | You are testing — against an isolated environment with synthetic data. |
| Break glass | Normal RBAC administration is unavailable and an outage demands it. Nothing less. |
Where authorization actually happens
The gateway verifies the JWT once at the edge and forwards identity headers bound by INTERNAL_SECRET. Downstream services trust those headers and never re-verify, which is why nothing may reach a service except through the gateway.
The access token lives in browser memory; the refresh token lives in an httpOnly cookie with rotation and reuse detection. <RequirePermission> in the UI is a hint for rendering — it is never authorization.