根据文档,签名密钥解析器可以动态获取密钥:https ://github.com/jwtk/jjwt#signing-key-resolver
以下代码确实调用了一个 kotlin 挂起函数,该函数以非阻塞方式检索公钥:
val parser =
Jwts.parserBuilder()
.setSigningKeyResolver(object : SigningKeyResolverAdapter() {
override fun resolveSigningKey(header: JwsHeader<out JwsHeader<*>>, claims: Claims?): Key {
return runBlocking {
retrievePublicKey(header["kid"])
}
}
}).build()
val claims = parser.parseClaimsJws(jwtString).body
这是挂起函数的定义
suspend fun retrievePublicKey(key:String):PublicKey {
...
}
问题是这段代码需要阻塞线程(runBlocking
)。否则无法正常工作。
这个挑战也存在于所有其他异步框架(rxjava、listenablefuture、completablefuture,...)