seahaven-ap/packages/api/docs/auth.md
Adam Moussa 9d3646876e
feat(api): stand up Hono Drizzle foundation with auth and Redocly (AP-14) (#12)
* feat(api): stand up Hono Drizzle foundation with auth and Redocly

* fix(api): bump drizzle-orm and hono node-server past audit highs

* fix(api): harden auth upsert and Cognito token verification
2026-08-11 00:10:49 +00:00

1.4 KiB

Authentication

Cognito bearer tokens

Production and seahaven-dev expect a Bearer Cognito token verified against the user pool JWKS and issuer.

Audience check:

  • ID tokens (token_use=id): aud must equal COGNITO_AUDIENCE (app client id).
  • Access tokens (token_use=access): client_id must equal COGNITO_AUDIENCE.

Identity claims (sub, email, and name or cognito:username) are required. Prefer a Cognito ID token, which carries email/name by default. An access token is accepted only when it includes an email claim (for example via a pre-token-generation enrichment).

Optional role claim mapping:

  • custom:role or role → role (admin, ap_processor, approver, viewer)
  • Missing role defaults to viewer

Users are upserted by sub only. An email already linked to a different sub returns HTTP 409 and does not rebind the account.

Local DEV_AUTH_BYPASS

For local development only, set DEV_AUTH_BYPASS=true. The middleware uses DEV_AUTH_SUB, DEV_AUTH_EMAIL, DEV_AUTH_NAME, and DEV_AUTH_ROLE and skips JWT verification.

Align DEV_AUTH_SUB with the seeded Cognito subject (default seed-sub-admin) so local auth updates the seed user instead of conflicting on email.

DEV_AUTH_BYPASS is allowed only when NODE_ENV is development or test. Any other value (including production, staging, and preview) rejects startup.