diff --git a/datahub-frontend/app/auth/sso/oidc/OidcCallbackLogic.java b/datahub-frontend/app/auth/sso/oidc/OidcCallbackLogic.java index 23776ff8f3..9039aa05f3 100644 --- a/datahub-frontend/app/auth/sso/oidc/OidcCallbackLogic.java +++ b/datahub-frontend/app/auth/sso/oidc/OidcCallbackLogic.java @@ -245,8 +245,22 @@ public class OidcCallbackLogic extends DefaultCallbackLogic groupSnapshots = new ArrayList<>(); - // We found some groups. Note that we assume it is an array of strings! - final Collection groupNames = (Collection) profile.getAttribute(groupsClaimName, Collection.class); + final Collection groupNames; + final Object groupAttribute = profile.getAttribute(groupsClaimName); + if (groupAttribute instanceof Collection) { + // List of group names + groupNames = (Collection) profile.getAttribute(groupsClaimName, Collection.class); + } else if (groupAttribute instanceof String) { + // Single group name + groupNames = Collections.singleton(profile.getAttribute(groupsClaimName, String.class)); + } else { + log.error(String.format("Failed to parse OIDC group claim with name %s. Unknown type %s provided.", + groupsClaimName, + groupAttribute.getClass())); + // Return empty list. Do not throw. + return Collections.emptyList(); + } + for (String groupName : groupNames) { // Create a basic CorpGroupSnapshot from the information. try {