You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:34:53