Debian
3a707e2e3f
feat(auth): OIDC/Keycloak SSO-Login (additiv) — v1.2.91
SSO per OpenID Connect (Authorization Code + PKCE) zusätzlich zum lokalen Login.
- Regeln: kein Auto-Provisioning (E-Mail muss als User existieren), Rolle aus DB (nie aus Token), lokaler Login+TOTP unangetastet.
- Migration 0040: oidc_settings (Singleton, client_secret_enc via secrets.Box) + users.oidc_subject.
- internal/services/oidc: Settings-Repo (write-only Secret) + lazy go-oidc Client (testbarer Authenticator-Seam).
- internal/handlers/oidc.go: GET/PUT /oidc/settings (admin), GET /auth/oidc/{settings,login,callback}. Flow-State (state/PKCE/nonce) stateless im 5-min signierten HttpOnly-Cookie (SameSite=Lax). email_verified erzwungen, opportunistisches sub-Linking, Session via setSessionCookie+Signer.
- session.SignBlob/VerifyBlob; users.Get/SetOIDCSubject; main.go-Wiring.
- Frontend: App.tsx /auth/me-Bootstrap (für Cookie-Session nach Callback), Login-SSO-Button + sso_error, Settings OIDC-Card, i18n de/en.
- Tests (guarded EG_FWTEST_DSN): Secret-Roundtrip + Callback (Rolle-aus-DB, no_account, disabled, unverified, nonce, state).
Deps: go-oidc/v3, x/oauth2. Scope v1: nur Login (kein SLO/Refresh).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 16:04:13 +02:00
..
2026-05-29 07:15:16 +02:00
2026-05-08 18:45:41 +02:00
2026-05-09 11:24:42 +02:00
2026-05-09 11:24:42 +02:00
2026-05-13 15:57:05 +02:00
2026-05-19 16:18:41 +02:00
2026-05-31 18:18:31 +02:00
2026-05-11 20:55:47 +02:00
2026-05-29 07:15:16 +02:00
2026-05-13 18:49:02 +02:00
2026-05-12 23:22:55 +02:00
2026-05-31 18:18:31 +02:00
2026-06-04 13:18:54 +02:00
2026-05-30 12:56:20 +02:00
2026-05-31 18:18:31 +02:00
2026-06-04 12:10:41 +02:00
2026-06-01 20:25:48 +02:00
2026-05-13 15:30:07 +02:00
2026-05-31 18:18:31 +02:00
2026-05-24 12:59:13 +02:00
2026-05-21 08:42:31 +02:00
2026-05-21 08:42:31 +02:00
2026-05-12 21:05:39 +02:00
2026-05-31 18:46:54 +02:00
2026-05-31 18:18:31 +02:00
2026-05-27 18:48:04 +02:00
2026-05-30 13:41:29 +02:00
2026-05-11 13:41:16 +02:00
2026-05-12 21:29:38 +02:00
2026-05-23 16:57:17 +02:00
2026-05-30 13:41:29 +02:00
2026-05-28 14:57:35 +02:00
2026-06-05 16:04:13 +02:00
2026-06-05 16:04:13 +02:00
2026-05-12 23:50:26 +02:00
2026-05-10 18:23:18 +02:00
2026-05-29 17:45:26 +02:00
2026-06-02 16:03:37 +02:00
2026-05-09 21:49:14 +02:00
2026-05-31 18:18:31 +02:00
2026-06-03 11:31:49 +02:00
2026-05-24 22:09:37 +02:00