This commit is contained in:
Bastian Wagner
2026-07-20 18:36:54 +02:00
parent b357de6a35
commit e2504ab108
3 changed files with 21 additions and 4 deletions

View File

@@ -14,12 +14,12 @@ DATABASE_SSL=false
OIDC_ISSUER=https://idp.example.com/realms/internal OIDC_ISSUER=https://idp.example.com/realms/internal
OIDC_CLIENT_ID=business-app OIDC_CLIENT_ID=business-app
OIDC_CLIENT_SECRET=change-me OIDC_CLIENT_SECRET=change-me
OIDC_SCOPES=openid profile email OIDC_SCOPES=openid profile email groups
OIDC_LOGOUT_URL= OIDC_LOGOUT_URL=
OIDC_ALLOWED_ALGORITHMS=RS256 OIDC_ALLOWED_ALGORITHMS=RS256
OIDC_HTTP_TIMEOUT_MS=5000 OIDC_HTTP_TIMEOUT_MS=5000
OIDC_ADMIN_ROLE=hauspilot-admin OIDC_ADMIN_ROLE=hauspilot-admin
OIDC_ROLES_CLAIM=roles OIDC_ROLES_CLAIM=groups
OIDC_ROLE_MATCH_CASE_SENSITIVE=true OIDC_ROLE_MATCH_CASE_SENSITIVE=true
SESSION_COOKIE_NAME=app_session SESSION_COOKIE_NAME=app_session

View File

@@ -42,6 +42,8 @@ separat ausgefuehrt.
| `OIDC_LOGOUT_URL` | Optionale IdP-Logout-URL, falls Discovery keine liefert | | `OIDC_LOGOUT_URL` | Optionale IdP-Logout-URL, falls Discovery keine liefert |
| `OIDC_ALLOWED_ALGORITHMS` | Erlaubte ID-Token-Signaturalgorithmen, z. B. `RS256` | | `OIDC_ALLOWED_ALGORITHMS` | Erlaubte ID-Token-Signaturalgorithmen, z. B. `RS256` |
| `OIDC_HTTP_TIMEOUT_MS` | Timeout fuer IdP-HTTP-Requests | | `OIDC_HTTP_TIMEOUT_MS` | Timeout fuer IdP-HTTP-Requests |
| `OIDC_ADMIN_ROLE` | Externer Rollen- oder Gruppenname fuer Administratoren |
| `OIDC_ROLES_CLAIM` | Claim-Pfad der externen Rollen, z. B. `groups` |
Der Callback ist immer: Der Callback ist immer:
@@ -101,10 +103,13 @@ DATABASE_SSL=true
OIDC_ISSUER=https://idp.example.com/realms/internal OIDC_ISSUER=https://idp.example.com/realms/internal
OIDC_CLIENT_ID=business-app OIDC_CLIENT_ID=business-app
OIDC_CLIENT_SECRET=<secret> OIDC_CLIENT_SECRET=<secret>
OIDC_SCOPES=openid profile email OIDC_SCOPES=openid profile email groups
OIDC_LOGOUT_URL=https://idp.example.com/realms/internal/protocol/openid-connect/logout OIDC_LOGOUT_URL=https://idp.example.com/realms/internal/protocol/openid-connect/logout
OIDC_ALLOWED_ALGORITHMS=RS256 OIDC_ALLOWED_ALGORITHMS=RS256
OIDC_HTTP_TIMEOUT_MS=5000 OIDC_HTTP_TIMEOUT_MS=5000
OIDC_ADMIN_ROLE=hauspilot-admin
OIDC_ROLES_CLAIM=groups
OIDC_ROLE_MATCH_CASE_SENSITIVE=true
SESSION_COOKIE_NAME=app_session SESSION_COOKIE_NAME=app_session
SESSION_IDLE_TIMEOUT_SECONDS=28800 SESSION_IDLE_TIMEOUT_SECONDS=28800
SESSION_ABSOLUTE_TIMEOUT_SECONDS=604800 SESSION_ABSOLUTE_TIMEOUT_SECONDS=604800

View File

@@ -8,7 +8,7 @@ der frühere Mechanismus „erster Benutzer wird Administrator“ existiert nich
```env ```env
OIDC_ADMIN_ROLE=hauspilot-admin OIDC_ADMIN_ROLE=hauspilot-admin
OIDC_ROLES_CLAIM=roles OIDC_ROLES_CLAIM=groups
OIDC_ROLE_MATCH_CASE_SENSITIVE=true OIDC_ROLE_MATCH_CASE_SENSITIVE=true
``` ```
@@ -17,6 +17,18 @@ OIDC_ROLE_MATCH_CASE_SENSITIVE=true
`realm_access.roles` oder `resource_access.hauspilot.roles`. Der Claim darf ein String oder ein `realm_access.roles` oder `resource_access.hauspilot.roles`. Der Claim darf ein String oder ein
Array aus Strings sein; Leerwerte und Duplikate werden entfernt. Array aus Strings sein; Leerwerte und Duplikate werden entfernt.
Der konfigurierte Claim muss vom Provider fuer die angeforderten Scopes geliefert werden. Fuer
Provider, die Gruppen ueber den standardnahen `groups`-Scope in UserInfo bereitstellen, gilt:
```env
OIDC_SCOPES=openid profile email groups
OIDC_ROLES_CLAIM=groups
```
Das Backend liest den `userinfo_endpoint` aus der OIDC-Discovery und ruft ihn serverseitig mit dem
Access-Token auf. Der Access-Token und die vollstaendigen Claims werden nicht an den Browser gegeben
oder protokolliert.
Ist `OIDC_ADMIN_ROLE` leer oder nicht gesetzt, protokolliert der Start eine Warnung. HausPilot Ist `OIDC_ADMIN_ROLE` leer oder nicht gesetzt, protokolliert der Start eine Warnung. HausPilot
fügt dann keine OIDC-Administratorzuweisung hinzu und entfernt auch keine bestehende. Ein gesetztes fügt dann keine OIDC-Administratorzuweisung hinzu und entfernt auch keine bestehende. Ein gesetztes
`OIDC_ADMIN_ROLE` ohne gültiges `OIDC_ROLES_CLAIM` führt zu einem Startfehler. `OIDC_ADMIN_ROLE` ohne gültiges `OIDC_ROLES_CLAIM` führt zu einem Startfehler.