Identity first
Every request proves who it is
No endpoint infers authority from network location, VPN membership or an internal hostname. Tokens carry the tenant claim, and services scope every query by it, so a valid token from one deployment returns nothing in another.
token tenant claim · re-checked per query · cross-deployment replay answers empty
Context-aware authorization
RBAC, then ABAC on top
Permissions are evaluated with context — assignment, admission state, ward, shift, time of day. "A doctor may edit only admitted patients assigned to them today" is a policy expression, not code someone has to remember to write.
policy engine · authorization matrix tested endpoint × role in CI
Separate planes
Patients cannot reach staff APIs
Patients authenticate on a cryptographically separate identity plane. A portal token is not merely unauthorized against a staff endpoint — it is unusable, because it is not the same kind of credential.
separate token plane · no shared session surface
Strong authentication
Passwordless first
Passkeys and WebAuthn as the flagship staff login, with TOTP and one-time codes as fallbacks and SSO where you already have an identity provider. Passkey cloning is detected by counter regression and flags the credential permanently.
passkeys · TOTP · OTP · OIDC SSO · lockout and rate limiting
No enumeration
The system does not leak who exists
One-time-code requests, password resets and method lookups answer identically whether or not the account exists, so an attacker cannot harvest valid usernames before attempting anything else.
uniform responses · single-use expiring codes · purpose isolation
Never auto-provision
SSO cannot create staff
A federated login matches an existing staff record or it fails. An identity provider — or anyone who compromises one — cannot mint a new user in your hospital, and a locked account stays locked through SSO.
signed short-lived state · nonce · match existing staff only