# Authentication and Authorization (Shared Contract)

This document defines the shared, cross-app contract for authentication and authorization.

It does not define Next.js routing details or NestJS guard wiring.

App-specific documents:

- API enforcement: [`docs/architecture/api/AUTH_FLOW.md`](docs/architecture/api/AUTH_FLOW.md:1)
- Website UX flow: [`docs/architecture/website/WEBSITE_AUTH_FLOW.md`](docs/architecture/website/WEBSITE_AUTH_FLOW.md:1)

## 1) Core principle (non-negotiable)

The API is the single source of truth for:

- who the actor is
- what the actor is allowed to do

The website may improve UX. It does not enforce security.

## 2) Authentication (strict)

Authentication answers:

- who is this actor

Rules:

- the actor identity is derived from the authenticated session
- the client must never be allowed to claim an identity

## 3) Authorization (strict)

Authorization answers:

- is this actor allowed to perform this action

Rules:

- authorization is enforced in the API
- the website may hide or disable UI, but cannot enforce correctness

See: [`docs/architecture/api/AUTHORIZATION.md`](docs/architecture/api/AUTHORIZATION.md:1)

## 4) Shared terminology (hard)

- Guard: API enforcement mechanism
- Blocker: website UX prevention mechanism

Shared contract: [`docs/architecture/shared/BLOCKERS_AND_GUARDS.md`](docs/architecture/shared/BLOCKERS_AND_GUARDS.md:1)

