Zum Inhalt

🔐 Keycloak-Integration – Statusbericht (historisch)

Datum: 20.11.2025
Status: ✅ 95 % implementiert – bereit für Tests
Hinweis: Keycloak wurde später durch Authentik ersetzt; dieses Dokument dient nur der Nachvollziehbarkeit.


Implementierte Phasen

1) Docker & Infrastruktur (100 %)

  • Keycloak-Container (Port 8090) + PostgreSQL-DB (llars_keycloakdb)
  • docker-compose.yml konfiguriert, Realm-Import (llars, Clients: llars-frontend, llars-backend)
  • Admin-User admin/admin123, Rollen admin, rater, evaluator
  • CORS- und Env-Variablen gesetzt

2) Backend (100 %)

  • Abhängigkeiten: python-keycloak, PyJWT, cryptography
  • Token-Validierung: app/auth/keycloak_validator.py
  • Decorators: @keycloak_required, @admin_required, @roles_required, @optional_auth
  • Routen: /auth/keycloak/health_check, /auth/keycloak/me, /auth/keycloak/validate, /auth/keycloak/admin/check

3) Frontend (100 %)

  • @dsb-norge/vue-keycloak-js integriert (Axios-Interceptor, Token-Refresh)
  • Login-Flow auf Keycloak umgestellt, Router-Guards mit Rollen-Check
  • Yjs-WebSocket: JWT-Validierung mit jwks-rsa

Bekannte Punkte & Fixes

  • Dependency: python-keycloak Version auf 5.0.0 angehoben (4.8.0 existiert nicht).
  • .env: Platzhalter für OPENAI-API korrigiert.
  • docker-compose: Optionale ssh-Proxy-Abhängigkeit entfernt.

Test-Checkliste (Keycloak-Setup)

  • Keycloak läuft auf Port 8090, Admin-Console erreichbar.
  • Realm llars importiert, Clients vorhanden.
  • Backend-Health: /auth/keycloak/health_check antwortet.
  • Login-Flow: Redirect zu Keycloak, Token im Browser, Rücksprung zu /Home.
  • WebSocket: JWT-Validierung aktiv.

Deployment-Hinweise (historisch)

  • Development: docker compose up -d --build (alle Ports exponiert).
  • Production: nur nginx Port 80/443 freigeben; Backend/Frontend/Yjs intern.
  • Admin-Konsole: http://localhost:8090/admin (admin / admin_secure_password_123).

Fazit: Die Keycloak-Integration war funktional abgeschlossen; spätere Versionen migrierten auf Authentik. Dieses Dokument bleibt als Referenz im Archiv.