.cursor/hook-logs/audit.jsonl
0 → 100644
+177
−0
+19
−0
Loading
OEG now checks the Keycloak access token on every CAMARA route (QoD, Edge Application Management, Location Retrieval) and enforces what each operation's CAMARA spec declares.
core/auth/)Authorization: Bearer <JWT> and checks the signature against Keycloak's JWKS, with the algorithm fixed to RS256. It also checks iss, aud (default oeg) and exp.kid (5-minute lifetime, refetched when an unknown kid arrives) and loaded once at startup.organization, roles from realm_access.roles, and subject from sub. Two-legged vs three-legged is detected from auth_time.core/authorization.py)OPERATION_REQUIREMENTS, lists the required role, CAMARA scope and three-legged requirement for every route.
app-provider role./platform/readyz now also reports JWKS health.KEYCLOAK_SETTINGS__ENFORCEMENT_ENABLED=false logs auth_would_reject / authz_would_reject instead of rejecting. It's meant only for a supervised migration window; the default is true.
subject_id for device lookup. For now this is the raw sub.| Env var | Notes |
|---|---|
KEYCLOAK_SETTINGS__ISSUER |
Must equal Keycloak's public URL + /realms/oop (what Keycloak writes into iss), not the in-cluster service name |
KEYCLOAK_SETTINGS__JWKS_URL |
In-cluster URL, e.g. http://keycloak:8080/realms/oop/protocol/openid-connect/certs |
KEYCLOAK_SETTINGS__AUDIENCE |
Default oeg |
KEYCLOAK_SETTINGS__ENFORCEMENT_ENABLED |
Default true |
The defaults point to *.invalid addresses on purpose, so a deployment missing this configuration fails loudly instead of trusting a guessed URL.
/platform/v1/federation/*) don't have a role check yet. A follow-up will require the operator role on them. OEG → FM stays protected by network policy only.