auth-yes/docs/archive/AUTH_AUDIT_PROGRESS.md

192 lines
9.5 KiB
Markdown

# Audit Log - Completed Features & Progress Tracking
This document outlines the specific features and architectural fixes that have
been implemented based on the target IAM architecture outlined in
`AUTH_AUDIT_REPORT.md`.
## 1. Monorepo Workspace Initialization (`deno.json`)
- Created a root `deno.json` file configuring the workspace (`tasks` for `lint`,
`fmt`, `check`, and `test`).
- Adjusted Deno linting rules to allow existing codebase patterns
(`no-explicit-any`, `no-import-prefix`, `require-await`) ensuring tests pass
without halting progressive refactoring.
## 2. PostgreSQL Identity Schema Enhancements (`auth-yes/server/db.ts`)
- Added `display_name` and `account_status` columns to the existing `users`
table using safe `ALTER TABLE ... ADD COLUMN IF NOT EXISTS` commands.
- Implemented tables required for RBAC, multi-tenancy, and invitation lifecycle
management:
- `apps`: To support subsidiary application scoping, now including an
`app_secret` column for authorization validation mapping.
- `grants`: To connect users to apps with role-based scoping.
- `invites`: To allow invite-code-based user provisioning.
- `audit_records`: To properly log security and administrative actions.
- These changes address the "Centralized DB Schema Coupling" and "RBAC &
Multi-tenancy" points from the audit report, enabling proper authorization
coupling.
## 3. App-level RBAC Grants Implementation (`auth-yes/server/main.ts`)
- Added RBAC enforcement directly into the Identity Provider's `/api/validate`
middleware validation endpoint.
- Validates the `X-App-Secret` to securely map the calling application back to
its `app_id`.
- Performs a direct authorization check against the `grants` table for the
matched `app_id` and the session's `user_id`.
- Rejects requests (returns `403 Forbidden` / `401 Unauthorized`) if a user has
a valid identity session but no explicit role grant for the application.
## 4. WebAuthn Related Origins Document (`core/api-server.ts`)
- Added a `GET /.well-known/webauthn` endpoint to the Auth Hub Hono application.
- This returns a valid JSON document conforming to the FIDO WebAuthn Related
Origins specification by outputting the environment's `ORIGIN`.
## 5. FIDO MDS3 Hardware Attestation
- Addressed an authentication bypass risk in hardware attestation.
- Updated `keyProtection` verification in the WebAuthn registration process to
correctly validate against the numeric `0x0001` (SOFTWARE) flag as defined by
the FIDO MDS specification, rather than the string `"software"`.
## 6. Secure Invite Code Provisioning
- Hardened `/api/admin/invites/create` inputs to reject improperly typed
properties and out of bounds values.
- Enforced strict UUID string validation on `appId`.
- Added boundaries to `role`, strictly enforcing non-empty string payloads under
32 characters.
- Fixed the `expiresInDays` default fallback logic to use explicit nullish
coalescing to avoid edge cases.
- Enforced a 1 to 30 days inclusive bounds check on the invite expiration.
## 7. Network Rate Limiting
- Implemented multi-layered rate limiting backed by Valkey to ensure distributed
limits across Auth Gateway instances and protect against exhaustion (OOM)
attacks.
- Configured strict sliding window limits (10 req/min) per IP address on public
unauthenticated routes (`/api/login/*` and `/api/register/*`).
- Configured moderate limits (30 req/min) per user ID for authenticated
administrative routes (`/api/admin/*`).
- Configured high-throughput limits (2,000 req/min) per `X-App-Secret` for the
internal `/api/validate` fast path.
## 8. Audit Logging & Non-Repudiation Tracking
- Fully implemented the `audit_records` logging helper leveraging decoupled
asynchronous inserts (fire and forget) to prevent blocking the critical
execution path.
- Injected specific audit logging side-effects capturing the `X-Forwarded-For`
origin IP across all vital Identity Provider workflows:
- `invite_created` for provision tracking.
- `user_registered` for onboarding traceability.
- `registration_failed_attestation` to record and block potential spoofing
attacks or unsupported software keys.
- `login_success` and `login_failed`.
- `session_validation_failed` capturing internal cross-tenant spoofing
attempts or missing authorization scopes (strictly excluded successful
validations to preserve cache performance).
## 9. Valkey Session Management & Client-Side Caching
- Refactored the Auth API Gateway (`auth-yes/server/main.ts`) to write active
session data as stringified JSON directly into the Valkey cache with proper
TTL matching session expiration.
- Implemented the `/api/revoke` endpoint to explicitly delete the session key
from the cache, enabling microsecond-level session revocation.
- Added rigorous `try/catch` wrapping around all Valkey calls to ensure
fast-failure and avoid security leaks.
- Implemented RESP3 Client-Side Caching in the Deno App SDK
(`auth-yes/sdk/mod.ts`).
- Added a local `Map` to act as an L1 cache, configured the Valkey connection
with RESP3 (`HELLO 3`), enabled client tracking in `BCAST` mode, and
implemented logic to evict keys from the L1 cache upon receiving `invalidate`
push messages.
- Added reconnect handling to clear the L1 cache to avoid using stale data in
case of downtime.
## 10. gRPC/Connect Migration & SPIFFE/SPIRE mTLS
- Migrated the internal SDK-to-API communication from standard HTTP/REST
endpoints (`/api/validate`) to a robust gRPC/ConnectRPC architecture
(`AuthService.validateSession`).
- Integrated a custom Rust FFI module (`spire_ffi`) to communicate with the
SPIRE Agent via a Unix socket (`/var/run/spire/agent.sock`), securely fetching
x509 SVIDs directly into the Deno runtime without exposing the private keys
over the network.
- Implemented `extractSpiffeIdFromCert` in the Auth API to extract the
`spiffe://` URI from the Subject Alternative Name (SAN) of incoming mTLS
client certificates, replacing the insecure `X-App-Secret` token approach for
internal API authentication.
- Added strict mTLS proxy configurations in Traefik via
`infrastructure/setup.ts`, utilizing `PassTLSClientCert` middleware to inject
the validated `X-Peer-Cert` header into the internal network traffic and
explicitly stripping the spoofable header on ingress requests.
- Updated the database schema and validation logic to rely on the cryptographic
`spiffe_id` (via the `apps` table) for internal zero-trust application
authorization rather than shared symmetric secrets.
## 11. Resolved Minor Technical Debt
- Replaced the brittle string matching for SPIFFE ID extraction
(`extractSpiffeIdFromCert`) with robust ASN.1 parsing utilizing the
`@peculiar/asn1-schema` and `@peculiar/asn1-x509` libraries.
- Implemented proper fallback and error handling for missing dynamic libraries
when the `spire_ffi` Rust library fails to load via `Deno.dlopen`, allowing
for graceful degradation in different deployment environments.
- Sanitized gRPC error outputs within `AuthService.validateSession` to prevent
leaking verbose internal server states to connected clients during failure
scenarios.
## 12. Final System State & Audit Closure Summary
With the successful migration to gRPC/ConnectRPC and the integration of
SPIFFE/SPIRE for internal mTLS, **all backend security and architectural
requirements defined in the `AUTH_AUDIT_REPORT.md` are now fully implemented and
verified.**
The system operates as a state-of-the-art zero-trust Identity Provider:
- **Authentication:** Exclusively hardware-bound WebAuthn (FIDO MDS3 verified)
with centralized stateful Valkey session management.
- **Internal Network Security:** Fully encrypted and authenticated via mTLS,
rejecting any unauthenticated SDK-to-API requests.
- **Performance:** Optimized through gRPC multiplexing and RESP3 Client-Side
Caching, neutralizing network latency associated with central state
validation.
- **Resilience:** Protected by distributed rate limiting, and highly available
architecture capable of microsecond session revocation.
### Future Considerations (Upcoming Frontend Phase)
- **Auth UI Implementation:** A dedicated `auth-ui` frontend service is required
to surface the administrative workflows (e.g., generating invite codes,
toggling user statuses, and reviewing audit logs).
- **WebAuthn UX:** The frontend must elegantly handle cross-device registration
flows, explicitly guiding users to plug in their hardware tokens or scan QR
codes.
- **Redundant Passkey Management:** Implement the user-facing settings panel to
allow users to register multiple authenticators (platform and roaming) to
prevent account lockout, along with the UI to revoke specific compromised
authenticators.
## 13. Auth UI Web Application Initialization (`auth-yes/ui`)
- Initialized the foundational UI application directly within the `auth-yes`
workspace to encapsulate all Identity Provider capabilities.
- Followed the Atomic Architecture model, cleanly separating concerns into Pure
Logic (JSX layouts and view components), I/O (Hono route mapping), and
Explicit Side Effects (client-side WebAuthn JavaScript).
- Implemented `/login` and `/register` endpoints utilizing Deno Hono and
`hono/jsx`.
- Developed `auth-client.js` to handle `navigator.credentials.create()` and
`navigator.credentials.get()` operations and communicate with the underlying
API Gateway challenges.
- Successfully mounted the new `uiApp` router into the primary Identity Provider
API Gateway (`auth-yes/server/main.ts`).
- Updated the workspace `deno.json` compiler options to natively support
React-style JSX rendering (`jsxImportSource`).