0

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.

David Michael Gang
  • 7,107
  • 8
  • 53
  • 98

0 Answers0