The following code defines a SigningKeyResolverAdapter for the jjwt library
private val parser = Jwts.parserBuilder().setSigningKeyResolver(object : SigningKeyResolverAdapter() {
override fun resolveSigningKey(header: JwsHeader<*>, claims: Claims): Key {
return runBlocking {
keyRetriever.getPublicKey(header.keyId)
}
}
}).build()
The kotlin compilation fails with the following error:
Cannot infer type parameter T in var !>
JwsHeader.keyId: String! None of the following substitutions
receiver: JwsHeader arguments: ()
receiver: JwsHeader!> arguments: () receiver:
JwsHeader arguments: () receiver:
JwsHeader!> arguments: () receiver:
JwsHeader!>!> arguments: () receiver:
JwsHeader!> arguments: () can
be applied to receiver: JwsHeader<*> arguments: ()
When the line
keyRetriever.getPublicKey(header.keyId)
is changed to
keyRetriever.getPublicKey(header["kid"] as String)
everything works.
I don't get why this change makes a difference. header.keyId also return a string.