@@ -1706,10 +1706,13 @@ Or, if you need more flexibility, write a <<jose4j-validator-bearer>>:
17061706----
17071707package io.quarkus.it.oidc;
17081708
1709+ import java.util.Collections;
1710+ import java.util.List;
17091711import java.util.Map;
17101712
17111713import jakarta.enterprise.context.ApplicationScoped;
17121714
1715+ import org.eclipse.microprofile.jwt.Claims;
17131716import org.jose4j.jwt.MalformedClaimException;
17141717import org.jose4j.jwt.consumer.JwtContext;
17151718import org.jose4j.jwt.consumer.Validator;
@@ -1727,9 +1730,19 @@ public class AcrValueValidator implements Validator {
17271730 @Override
17281731 public String validate(JwtContext jwtContext) throws MalformedClaimException {
17291732 var jwtClaims = jwtContext.getJwtClaims();
1730- if (jwtClaims.hasClaim("acr")) {
1731- var acrClaim = jwtClaims.getStringListClaimValue("acr");
1732- if (acrClaim.contains("myACR") && acrClaim.contains("yourACR")) {
1733+ var acrClaimName = Claims.acr.name();
1734+
1735+ if (jwtClaims.hasClaim(acrClaimName)) {
1736+ // The claim 'acr' could be a String or a list
1737+ List<String> acrClaimValues;
1738+ if (jwtClaims.isClaimValueStringList(acrClaimName)) {
1739+ acrClaimValues = jwtClaims.getStringListClaimValue(acrClaimName);
1740+ } else if (jwtClaims.isClaimValueString(acrClaimName)) {
1741+ acrClaimValues = List.of(jwtClaims.getStringClaimValue(acrClaimName));
1742+ } else {
1743+ throw new MalformedClaimException("Claim '" + acrClaimName + "' is not a String or List of Strings.");
1744+ }
1745+ if (acrClaimValues.contains("myACR") && acrClaimValues.contains("yourACR")) {
17331746 return null;
17341747 }
17351748 }
0 commit comments