auth: OIDC/lokal inloggning + device-flow för klienter, sessioner per användare
Ersätter den delade AGENT_HELM_TOKEN med en riktig auth-modell: - Webben loggar in med lokala konton ELLER OIDC (Authentik/Keycloak/…), valt per server. Inloggning ger en HMAC-signerad cookie; WS autentiseras via cookien. - Klienten (daemon) kopplas via device-flödet (RFC 8628-likt): `agent-helm connect` skriver ut en URL, du loggar in + godkänner i webben, och får ett klient-token som identifierar din användare. Token sparas i ~/.config/agent-helm/. - Sessioner är per användare (web ser bara sina egna; admin ser alla). Flera klient-instanser = flera parallella sessioner; --new tvingar ny, annars resume. - Identitet är utbytbar (lokal/OIDC) men device-flödet + sessionerna är alltid agent-helms egna → funkar för vem som helst som hostar detta, med eller utan IdP. - Bootstrap-admin via env (engångs) eller first-run-setup i UI:t. Klient-creds kan listas/återkallas; minimal admin-UI (skapa användare, konfigurera OIDC). Nya filer: server/store.ts (JSON-store, scrypt, cookies), server/oidc.ts (auth-code+PKCE), web/lib/api.ts. Verifierat end-to-end lokalt (login → device → approve → daemon-WS → web ser sessionen; web utan cookie nekas). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U68YyHsxU91ecsen84WQV4
This commit is contained in:
24
README.md
24
README.md
@@ -155,8 +155,14 @@ konfigurerade, och att en trasig hook aldrig låser en session.
|
||||
|
||||
## Åtkomst, auth & notiser (Pi5)
|
||||
|
||||
- **Auth:** ingen delad token. **Webben** loggar in med **lokala konton** *eller*
|
||||
**OIDC** (Authentik/Keycloak/…) — väljs per server. **Klienten** kopplas via
|
||||
**device-flödet**: den skriver ut en URL, du loggar in och godkänner i webben, och
|
||||
får då ett klient-token som identifierar din användare. Sessioner är per användare;
|
||||
klienter kan återkallas individuellt. Första admin seedas via
|
||||
`AGENT_HELM_ADMIN_USER/PASSWORD` (engångs) eller en first-run-setup i UI:t.
|
||||
- **Åtkomst:** primärt via **Tailscale** (inget exponerat publikt). Alternativt via din
|
||||
NPM-reverse-proxy på t.ex. `agent.brasse-pc.eu` med auth framför.
|
||||
NPM-reverse-proxy på t.ex. `agent.brasse-pc.eu` (TLS terminerar i NPM → Secure-cookie).
|
||||
- **Notiser:** self-hostad **ntfy** på Pi5 pushar till mobilen när en session väntar på
|
||||
input. Servern postar till ett ntfy-topic; PWA:n / ntfy-appen tar emot.
|
||||
- **Registry:** server- och daemon-images byggs och pushas till `192.168.0.19:5000`.
|
||||
@@ -189,17 +195,21 @@ pnpm install \
|
||||
--virtual-store-dir /home/brasse/.cache/agent-helm/vstore
|
||||
# (På vanlig Linux-fs räcker: pnpm install)
|
||||
|
||||
# Konfig: kopiera och sätt en token
|
||||
cp .env.example .env # sätt AGENT_HELM_TOKEN + VITE_AGENT_HELM_TOKEN
|
||||
# Konfig: kopiera och sätt bootstrap-admin (lokalt läge)
|
||||
cp .env.example .env # sätt AGENT_HELM_ADMIN_USER/PASSWORD (engångs)
|
||||
|
||||
# Kör de tre delarna i var sin terminal:
|
||||
pnpm dev:server # control-plane på :8787
|
||||
pnpm dev:daemon # kör `gemini` i en pty, ansluter till servern
|
||||
pnpm dev:web # Vite-dev-server — öppna länken i webbläsaren
|
||||
pnpm dev:web # Vite-dev-server (proxar /api + /ws → :8787)
|
||||
# I en tredje terminal: logga in klienten + kör agenten
|
||||
pnpm --filter @agent-helm/daemon start -- connect --server http://localhost:5173
|
||||
```
|
||||
|
||||
Logga in i web-UI:t med samma token, välj sessionen och styr den. Sätt
|
||||
`AGENT_CMD=bash` för daemonen om du vill testa pipelinen utan Gemini-auth.
|
||||
1. Öppna Vite-länken, logga in som admin (eller kör first-run-setupen).
|
||||
2. Daemonen skriver ut en URL — öppna den, godkänn klienten.
|
||||
3. Daemonen ansluter och dyker upp i din session-lista. Styr den i webben.
|
||||
|
||||
Sätt `AGENT_CMD=bash` för daemonen om du vill testa pipelinen utan Gemini-auth.
|
||||
|
||||
## Status
|
||||
|
||||
|
||||
Reference in New Issue
Block a user