ドキュメントによると、署名キー リゾルバーは動的にキーを取得できます: 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 {
...
}
問題は、このコードが thread( runBlocking
) をブロックする必要があることです。それ以外の場合は機能しません。
この課題は、他のすべての非同期フレームワーク (rxjava、listenablefuture、completablefuture など) にも存在します。