fix: relax parsing of SCIM user 'active' flag to improve compatibility (#9296)

# Which Problems Are Solved
- Microsoft Entra invokes the user patch endpoint with `"active":
"True"` / `"active": "False"` when patching a user. This is a well-known
bug in MS Entra (see
[here](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/application-provisioning-config-problem-scim-compatibility)),
but the bug fix has not landed yet and/or the feature flag does not
work.

# How the Problems Are Solved
- To ensure compatibility with MS Entra, the parsing of the the boolean
active flag of the scim user is relaxed and accepts strings in any
casing that resolve to `true` or `false` as well as raw boolean values.

# Additional Context
Part of https://github.com/zitadel/zitadel/issues/8140
This commit is contained in:
Lars
2025-02-05 16:17:20 +01:00
committed by GitHub
parent 857812bb9e
commit 361f7a2edc
12 changed files with 125 additions and 19 deletions

View File

@@ -273,7 +273,7 @@ func (h *UsersHandler) mapToScimUser(ctx context.Context, user *query.User, md m
FamilyName: user.Human.LastName,
GivenName: user.Human.FirstName,
},
Active: gu.Ptr(user.State.IsEnabled()),
Active: schemas.NewRelaxedBool(user.State.IsEnabled()),
}
if string(user.Human.Email) != "" {
@@ -311,7 +311,7 @@ func (h *UsersHandler) mapWriteModelToScimUser(ctx context.Context, user *comman
FamilyName: user.LastName,
GivenName: user.FirstName,
},
Active: gu.Ptr(user.UserState.IsEnabled()),
Active: schemas.NewRelaxedBool(user.UserState.IsEnabled()),
}
if string(user.Email) != "" {