在验证 JWT 时,我有一个允许的客户端 ID 列表的场景。我将客户端 ID 作为受众声明放入 JWT 中,但是在验证时我需要与列表进行比较。
我尝试了以下方法:
val allowedClients = listof("client1", "client2")
val validClaims= JWTClaimsSet.Builder()
.issuer("myIssuer")
.audience(allowedClients)
.build()
val jwtProcessor: ConfigurableJWTProcessor<SecurityContext> = DefaultJWTProcessor()
jwtProcessor.jwsKeySelector = keySelector
jwtProcessor.jwtClaimsSetVerifier = DefaultJWTClaimsVerifier(
//exact match claims
validClaims,
//Required claims
HashSet(listOf("exp", "iss")))
jwtProcessor.jwsKeySelector = keySelector
但是,如果现在只使用我正在执行的一个客户端 ID 发出 JWT,那么验证将失败
com.nimbusds.jwt.proc.BadJWTException: JWT aud claim has value [client2], must be [client1, client2]
我该怎么做才能使验证者期望任何客户端 ID 在观众声明中,但不是完整列表?当然,另一种选择是在开头的观众声明中添加一个客户端 ID,但我想避免这种情况。