使用JJWT库进行后端JWT验证,如何实现多受众的或逻辑匹配?
JJWT多受众(OR逻辑)验证解决方案
内置API实现(JJWT 0.11.0+)
JJWT从0.11.0版本开始支持直接传入受众集合,实现任一匹配的验证逻辑,无需自定义代码:
import java.util.Arrays; // 构建解析器时传入受众列表 Jwts.parser() .setSigningKey(yourSigningKey) // 替换为你的签名密钥 .requireAudience(Arrays.asList("FE1", "FE2")) // JWT的aud只需匹配其中一个即可通过 .parseClaimsJws(jwtToken);
也可以通过声明断言的方式实现相同逻辑:
Jwts.parser() .setSigningKey(yourSigningKey) .claim("aud", claim -> claim.in(Arrays.asList("FE1", "FE2"))) .parseClaimsJws(jwtToken);
自定义验证逻辑(兼容低版本JJWT)
如果你的JJWT版本低于0.11.0,无法使用上述API,可以手动提取受众声明并验证:
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.SignatureException; import java.util.List; // 先完成基础解析和签名验证 Jws<Claims> jws = Jwts.parser() .setSigningKey(yourSigningKey) .parseClaimsJws(jwtToken); Claims claims = jws.getBody(); List<String> audiences = claims.getAudience(); // 验证受众是否为FE1或FE2 if (audiences == null || (!audiences.contains("FE1") && !audiences.contains("FE2"))) { throw new SignatureException("Invalid audience: must be FE1 or FE2"); }
内容的提问来源于stack exchange,提问作者mrjovanovic
相关产品推荐
相关产品推荐

