Skip to content

Replace browser login with edge-asserted identity#51

Merged
czpython merged 1 commit into
mainfrom
commonzenpython/eng-730-edge-identity-headernone-door-cutover-onboarding-deploy
Jul 23, 2026
Merged

Replace browser login with edge-asserted identity#51
czpython merged 1 commit into
mainfrom
commonzenpython/eng-730-edge-identity-headernone-door-cutover-onboarding-deploy

Conversation

@czpython

@czpython czpython commented Jul 21, 2026

Copy link
Copy Markdown
Owner

druks stops authenticating browsers: the edge asserts identity and druks verifies and maps it to an account, per request.

  • Auth modesDRUKS_AUTH_MODE=none (loopback dashboard: no authentication, exactly one operator account, created by the first harness connect) or header (the edge injects the operator's email in DRUKS_AUTH_HEADER — no default, the operator names their edge's header; open enrollment, the edge gates who reaches druks). jwt follows in Add verified JWT edge assertions via JWKS #52.
  • Per-request resolution — a bearer PAT always resolves first (fastapi.security.HTTPBearer; a present Authorization never falls through), else the edge/none identity. Redis sessions, cookies, and the login/logout surface are deleted. No DB migration.
  • Harness OAuth → capability connectPOST/DELETE /api/harnesses/{name}/connection... attaches a subscription to the current account; in none/zero the first completed connection creates the sole operator. Capability management (tokens and disconnect) admits the session identity only (current_session_account), never a bearer.
  • Failure posture — none-mode drift (a second operator account) refuses startup and answers 503; header mode refuses to boot without a named header.
  • SPA — boots from GET /api/auth/me (IdentityBootstrap; first run renders Onboarding), query cache keyed by account.
  • Installer emits per-shape identity config; Caddyfile, compose, and docs rewritten to the assert-and-map contract.

🤖 Generated with Claude Code

@czpython
czpython force-pushed the commonzenpython/eng-729-edge-identity-extract-request-actor-context-pr-1 branch from f1971b5 to 0c7a693 Compare July 21, 2026 20:58
Base automatically changed from commonzenpython/eng-729-edge-identity-extract-request-actor-context-pr-1 to main July 21, 2026 20:59
@czpython
czpython force-pushed the commonzenpython/eng-730-edge-identity-headernone-door-cutover-onboarding-deploy branch 4 times, most recently from a8a25bb to 8bce775 Compare July 23, 2026 20:47
@czpython
czpython force-pushed the commonzenpython/eng-730-edge-identity-headernone-door-cutover-onboarding-deploy branch from 8bce775 to 150883b Compare July 23, 2026 20:48
@czpython
czpython merged commit 9a1ae05 into main Jul 23, 2026
2 checks passed
@czpython
czpython deleted the commonzenpython/eng-730-edge-identity-headernone-door-cutover-onboarding-deploy branch July 23, 2026 20:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant