keycloak: repair ldap federation parentId
This commit is contained in:
parent
8a2f3c733e
commit
1346ccd31b
@ -2,7 +2,7 @@
|
|||||||
apiVersion: batch/v1
|
apiVersion: batch/v1
|
||||||
kind: Job
|
kind: Job
|
||||||
metadata:
|
metadata:
|
||||||
name: keycloak-ldap-federation-2
|
name: keycloak-ldap-federation-3
|
||||||
namespace: sso
|
namespace: sso
|
||||||
spec:
|
spec:
|
||||||
backoffLimit: 2
|
backoffLimit: 2
|
||||||
@ -127,6 +127,45 @@ spec:
|
|||||||
raise SystemExit(f"Unable to resolve realm id for {realm} (status={status})")
|
raise SystemExit(f"Unable to resolve realm id for {realm} (status={status})")
|
||||||
realm_id = realm_rep["id"]
|
realm_id = realm_rep["id"]
|
||||||
|
|
||||||
|
# Some historical LDAP federation components were created with parentId=<realm name>.
|
||||||
|
# That makes realm resolution null in Keycloak internals and breaks authentication.
|
||||||
|
status, all_components, _ = http_json(
|
||||||
|
"GET",
|
||||||
|
f"{base_url}/admin/realms/{realm}/components",
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
if status != 200:
|
||||||
|
raise SystemExit(f"Unexpected components response: {status}")
|
||||||
|
all_components = all_components or []
|
||||||
|
|
||||||
|
for c in all_components:
|
||||||
|
if c.get("providerId") != "ldap":
|
||||||
|
continue
|
||||||
|
if c.get("providerType") != "org.keycloak.storage.UserStorageProvider":
|
||||||
|
continue
|
||||||
|
if c.get("parentId") == realm_id:
|
||||||
|
continue
|
||||||
|
cid = c.get("id")
|
||||||
|
if not cid:
|
||||||
|
continue
|
||||||
|
print(f"Fixing LDAP federation parentId for {cid} (was {c.get('parentId')})")
|
||||||
|
status, comp, _ = http_json(
|
||||||
|
"GET",
|
||||||
|
f"{base_url}/admin/realms/{realm}/components/{cid}",
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
if status != 200 or not comp:
|
||||||
|
raise SystemExit(f"Unable to fetch component {cid} (status={status})")
|
||||||
|
comp["parentId"] = realm_id
|
||||||
|
status, _, _ = http_json(
|
||||||
|
"PUT",
|
||||||
|
f"{base_url}/admin/realms/{realm}/components/{cid}",
|
||||||
|
token,
|
||||||
|
comp,
|
||||||
|
)
|
||||||
|
if status not in (200, 204):
|
||||||
|
raise SystemExit(f"Unexpected parentId repair status for {cid}: {status}")
|
||||||
|
|
||||||
# Find existing LDAP user federation provider (if any)
|
# Find existing LDAP user federation provider (if any)
|
||||||
status, components, _ = http_json(
|
status, components, _ = http_json(
|
||||||
"GET",
|
"GET",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user