Согласно документации, распознаватель ключей подписи может получить ключ динамически: https://github.com/jwtk/jjwt#signing -key-resolver
Следующий код вызывает функцию приостановки kotlin, которая извлекает publi c ключ неблокирующим способом:
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
). В противном случае это не сработает.
Эта проблема также существует для всех других асинхронных c фреймворков (rx java, listenablefuture, Completetablefuture, ...)