private Map<String, Object> validateJwt(String token, JWTPolicyBean config)
            throws ExpiredJwtException, PrematureJwtException, MalformedJwtException, SignatureException, InvalidClaimException {

        // check if we have to use jwk(s)
        if (urlValidator.isValid(config.getSigningKeyString())){
            if (provider == null){
                provider = getNewJwksProvider(config.getSigningKeyString());
            }

            Jwk jwk;
            try {
                jwk = provider.get(config.getKid());
                if (config.getSigningKey() == null || !(config.getSigningKey().equals(jwk.getPublicKey()))) {
                    config.setSigningKey(jwk.getPublicKey());
                }
            } catch (JwkException e) {
               throw new SignatureException("JWK was not found with kid: " + config.getKid(), e);
            }
        }

        JwtParser parser = Jwts.parser()
                .setSigningKey(config.getSigningKey())
                .setAllowedClockSkewSeconds(config.getAllowedClockSkew());

        // Set all claims
        config.getRequiredClaims().stream() // TODO add type variable to allow dates, etc
            .forEach(requiredClaim -> parser.require(requiredClaim.getClaimName(), requiredClaim.getClaimValue()));

        return parser.parse(token, new ConfigCheckingJwtHandler(config));
    }
Generic JWT/S Policy.

@author Marc Savy {@literal <msavy@redhat.com>}
plugins/jwt-policy/src/main/java/io/apiman/plugins/jwt/JWTPolicy.java