8.7 KiB
8.7 KiB
V3 IAM & Web UI Architectural Audit Report
1. System Implementation Status Matrix
| Component / Layer | Status | Implementation Details & File References |
|---|---|---|
| Auth Hub / Core Gateway Engine | [Completed] | auth-yes/server/main.ts: WebAuthn registration/login challenge & verify, direct database schema auto-init, Valkey session caching with TTL, sliding-window rate limiting, structured audit logging. |
| Session & Authorization Engine | [Completed] | auth-yes/server/auth-session.ts: Dual-layer session validation (Valkey cache + PostgreSQL fallback), global admin role detection. |
| Workload Identity & Zero-Trust Mesh | [Completed] | ConnectRPC / gRPC service with HTTP/2 multiplexing, SPIFFE/SPIRE x509 SVID mTLS client certificate authentication (spire_ffi Rust FFI), default-deny RBAC matching apps and grants. |
| Direct Server-Side Rendering (SSR) | [Completed] | auth-yes/ui/mod.ts: 100% in-process database & session queries for all UI routes, eliminating error-prone internal HTTP loopback fetches to 127.0.0.1:8000. |
| Docker Build Layer Caching | [Completed] | auth-yes/Dockerfile & auth-yes/deps.ts: Dedicated dependency caching layer reducing rebuild times from 20s to ~1s. |
| Client-Side WebAuthn Mechanics | [Completed] | auth-yes/ui/public/auth-client.js: Standard navigator.credentials handling for WebAuthn passkeys with robust error parsing. |
| User Directory & Account Status | [Completed] | auth-yes/ui/components/AdminUsersPage.tsx: User list, status toggles (Activate, Suspend, Re-Activate). |
| User Profile & Device Revocation | [Completed] | auth-yes/ui/components/AdminUserDetailsPage.tsx: Active sessions review & revocation, passkey device deletion, 24h Out-of-Band recovery link generation. |
| AAGUID Allow-List Management | [Completed] | auth-yes/ui/components/AAGUIDPage.tsx: Enterprise hardware AAGUID allow-list table and registration form. |
| Security Audit Logs | [Completed] | auth-yes/ui/components/AuditLogPage.tsx: Live audit trail of logins, registrations, status changes, and security events. |
| Connected Apps / Sites Registry UI | [Pending] | Backend apps table exists and ConnectRPC enforces it, but UI view (/admin/apps) to register/view applications is pending. |
| Multi-Type Invite Token Manager UI | [Pending] | Backend /api/admin/invites/create exists, but dedicated UI (/admin/invites) to generate Global Admin, Site-Scoped, and Open/Pending tokens with live ledger is pending. |
| User App RBAC Grants Manager UI | [Pending] | Database grants table and ConnectRPC scopes payload exist, but UI matrix on /admin/users/:id to assign/revoke app permissions per user is pending. |
| ForwardAuth Edge Proxy Route | [Pending] | Traefik ForwardAuth endpoint (/api/forward-auth) for Tier 2 legacy apps (Portainer, etc.) and wildcard .atyg.org cookie scoping. |
2. Architectural Refinements Captured in V3
2.1. WebAuthn Scope: Parent Domain (RP_ID=atyg.org) vs. ROR
- Previous Assumption: Assumed Related Origin Requests (ROR) via dynamic
/.well-known/webauthnwas required to share passkeys betweenauth.atyg.organded-droid.atyg.org. - V3 Architectural Finding: Under W3C WebAuthn Level 3 (eTLD+1 rules),
declaring
RP_ID=atyg.orgonhttps://auth.atyg.orgallows all subdomains (*.atyg.org) to natively share passkeys across all browsers without ROR overhead. - Resolution: ROR is archived as a Phase 5 feature reserved strictly for
future cross-TLD federations (e.g. bridging
atyg.orgwith external root domains).
2.2. Three-Tier Defense-in-Depth Model
- Tier 1 (Global Edge Default): Default Traefik ForwardAuth middleware applied to entrypoints, preventing exposure of untagged or pre-release containers.
- Tier 2 (Edge Proxy Override): Traefik ForwardAuth route
(
/api/forward-auth) verifying.atyg.orgsession cookies in Valkey and injectingX-Forwarded-Userheaders for third-party web UIs (Portainer, Grafana, PgAdmin). - Tier 3 (Zero-Trust App Mesh): In-app Deno SDK communicating over
ConnectRPC + SPIFFE/SPIRE mTLS with default-deny RBAC for native
microservices (
ed-droid).
2.3. Formatted 3-Tier Invite Token Taxonomy
- Global Admin Invite Token:
app_id: NULL,role: 'admin', creates active administrator. - Site-Scoped Invite Token:
app_id: <app-uuid>,role: 'user'(or app role), auto-activates user and binds app grant upon passkey enrollment. - General Open / Pending Onboarding Token:
app_id: NULL,role: 'user', creates account inpendingstatus for manual admin approval. - (Plus Out-of-Band Single-Use Account Recovery Token).
2.4. Explicit RBAC Lifecycle Paradigm
- Baseline (Zero-Trust Default-Deny): Newly provisioned user has zero
application access. Accessing
ed-droidreturns HTTP 403 Forbidden. - Assignment (Admin Console Matrix): Administrator navigates to
/admin/users/:idor RBAC Matrix, selectsed-droid, and assigns a role (viewer,operator,editor,admin). - Payload & Enforcement: Next time the user accesses
ed-droid, ConnectRPC returns{ valid: true, uuid: "...", scopes: ["viewer"] }, granting immediate runtime access.
3. Pending Implementation Roadmap
- Build Application Registry UI (
/admin/apps):- Table of registered apps (
name,spiffe_id,description,created_at,active_users_count). - Register Application form (
name,spiffe_id,description). - Delete application action with confirmation modal.
- Table of registered apps (
- Build Multi-Type Invite Token Manager UI (
/admin/invites):- Generation Form supporting all 3 token types (Global Admin, Site-Scoped with App dropdown, Open/Pending).
- Live ledger of active, used, and expired tokens with single-click copy
links (
https://auth.atyg.org/register?code=...) and revoke actions.
- Build User App RBAC Grants Matrix UI (
/admin/users/:id):- Table of user's active application access grants (
App Name,Role,Granted At). - Add Grant dropdown form (
App Selector,Role Selector: viewer | operator | editor | admin). - Revoke Grant action button.
- Table of user's active application access grants (
- Deploy Domain Wildcard Cookie (
.atyg.org) & ForwardAuth Route:- Update session cookie creation with
domain: ".atyg.org". - Add
GET /api/forward-authendpoint inauth-yesfor Traefik Tier 2 edge proxy validation.
- Update session cookie creation with