public Map<String, String> processAttributes(JwtClaims claims) throws GuacamoleException {
        Collection<String> attributesClaim = confService.getAttributesClaimType();

        if (claims != null && !attributesClaim.isEmpty()) {
            try {
                logger.debug("Iterating over attributes claim list : {}", attributesClaim);

                // We suppose all claims are resolved, so the hashmap is initialised to
                // the size of the configuration list
                Map<String, String> tokens = new HashMap<String, String>(attributesClaim.size());

                // We iterate over the configured attributes
                for (String key: attributesClaim) {
                    // Retrieve the corresponding claim
                    String oidcAttr = claims.getStringClaimValue(key);

                    // We do have a matching claim and it is not empty
                    if (oidcAttr != null && !oidcAttr.isEmpty()) {
                        // append the prefixed claim value to the token map with its value
                        String tokenName = TokenName.canonicalize(key, OIDC_ATTRIBUTE_TOKEN_PREFIX);
                        tokens.put(tokenName, oidcAttr);
                        logger.debug("Claim {} found and set to {}", key, tokenName);
                    }
                    else {
                        // wanted attribute is not found in the claim
                        logger.debug("Claim {} not found in JWT.", key);
                    }
                }

                // We did process all the expected claims
                return Collections.unmodifiableMap(tokens);
            }
            catch (MalformedClaimException e) {
                logger.info("Rejected OpenID token with malformed claim: {}", e.getMessage());
                logger.debug("Malformed claim within received JWT.", e);
            }
        }

        // Could not retrieve attributes from JWT
        logger.debug("Attributes claim not defined. Returning empty map.");
        return Collections.emptyMap();
    }
Parses the given JwtClaims, returning the attributes contained
therein, as defined by the attributes claim type given in
guacamole.properties. If the attributes claim type is missing or
is invalid, an empty set is returned.

@param claims
    A valid JwtClaims to extract attributes from.

@return
    A Map of String,String representing the attributes and values
    from the OpenID provider point of view, or an empty Map if
    claim is not valid or the attributes claim type is missing.

@throws GuacamoleException
    If guacamole.properties could not be parsed.
extensions/guacamole-auth-sso/modules/guacamole-auth-sso-openid/src/main/java/org/apache/guacamole/auth/openid/token/TokenValidationService.java