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-08 23:44:44 +02:00
2026-05-29 15:41:20 +02:00
2026-05-08 23:44:44 +02:00
2026-05-08 23:44:44 +02:00
2026-05-08 23:44:44 +02:00
2026-05-08 23:44:44 +02:00
2026-05-08 23:44:44 +02:00
2026-05-08 23:44:44 +02:00
2026-05-09 16:08:44 +02:00
2026-05-09 23:52:01 +02:00
2026-05-10 16:19:07 +02:00
2026-05-10 18:05:27 +02:00
2026-05-10 20:51:25 +02:00
2026-05-11 06:24:51 +02:00
2026-05-11 06:58:54 +02:00
2026-05-11 20:55:47 +02:00
2026-05-11 21:51:09 +02:00
2026-05-12 23:08:18 +02:00
2026-05-12 23:50:26 +02:00
2026-05-29 15:41:20 +02:00
2026-05-13 15:57:05 +02:00
2026-05-13 18:49:02 +02:00
2026-05-19 16:18:41 +02:00
2026-05-19 16:18:41 +02:00
2026-05-19 16:18:41 +02:00
2026-05-21 13:09:51 +02:00
2026-05-22 07:18:48 +02:00
2026-05-29 15:41:20 +02:00
2026-05-29 23:40:37 +02:00
2026-06-04 13:39:44 +02:00
2026-05-31 18:18:31 +02:00
2026-05-31 18:18:31 +02:00
2026-05-31 18:18:31 +02:00
2026-05-31 18:18:31 +02:00
2026-05-31 18:46:54 +02:00
2026-06-01 20:25:48 +02:00
2026-06-02 15:28:29 +02:00
2026-06-03 10:40:43 +02:00
2026-06-03 11:31:49 +02:00
2026-06-05 16:04:13 +02:00