# Authentication and Authorization Flow (API)

This document defines how authentication and authorization are enforced in the API.

Shared contract:

- [`docs/architecture/shared/AUTH_CONTRACT.md`](docs/architecture/shared/AUTH_CONTRACT.md:1)

## 1) Enforcement location (strict)

All enforcement happens in the API.

The API must:

- authenticate the actor from the session
- authorize the actor for the requested capability
- deny requests deterministically with appropriate HTTP status

## 2) Canonical request flow

```text
HTTP Request
  ↓
Authentication (resolve actor)
  ↓
Authorization (roles, permissions, scope)
  ↓
Controller (transport-only)
  ↓
Core Use Case
  ↓
Presenter mapping
  ↓
HTTP Response
```

## 3) Non-negotiable rules

1. Deny by default unless explicitly public.
2. The actor identity is derived from the session.
3. Controllers do not contain business rules.

Related:

- Authorization model: [`docs/architecture/api/AUTHORIZATION.md`](docs/architecture/api/AUTHORIZATION.md:1)
- Guards definition: [`docs/architecture/api/GUARDS.md`](docs/architecture/api/GUARDS.md:1)

