auth-yes/docs/archive/AUTH_AUDIT_PROGRESS.md

9.5 KiB

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.
  • 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).