Как использовать открытый ключ для проверки токена JWT с помощью vertx

Я использую Vertx с Kotlin и хочу аутентифицировать токен JWT.

У меня есть открытый ключ в файле Json Web Key от One Login.

{   "keys": [
{
  "kty": "RSA",
  "kid": "JRcO4nxs5jgc8YdN7I2hLO4V_ql1bdoiMXmcYgHm4Hs",
  "n": "z8fZsz...Something..GHSTAoQw",
  "e": "AQAB"
}   ] }

Как я могу использовать вышеупомянутый открытый ключ в файле Json Web Key для аутентификации, если токен JWT действителен?

Я использую класс / метод JWTAuth.create (vertx, config)

var config = JWTAuthOptions(
                pubSecKeys = listOf(PubSecKeyOptions(
                    algorithm = "RS256",
                    publicKey = "<Value Copied from above json's 'n' field>")))


  var provider = JWTAuth.create(myvertx, config)

Вышеупомянутая строка выдает исключение, в котором говорится, что RuntimeException: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: DerInputStream.getLength (): lengthTag = 71, слишком большой.


person Adnan Raza    schedule 02.07.2018    source источник


Ответы (1)


Я нашел решение вышеуказанной проблемы. Итак, если у вас есть URL-адрес сертификатов, который возвращает файл Json Web Key, вы можете создать из него объект java.security.PublicKey, который можно использовать с объектом PubSecKeyOptions.

Вам нужно прочитать значения клавиш n и e, n - это модуль, а e - показатель степени. Теперь вы можете получить действительный объект JWTAuthOptions следующим образом:

val n = Base64.getUrlDecoder().decode(nValue.toByteArray(StandardCharsets.UTF_8))
val e = Base64.getUrlDecoder().decode(eValue.toByteArray(StandardCharsets.UTF_8))
val thePublicKeyINeeded: PublicKey= =KeyFactory.getInstance("RSA).generatePublic(RSAPublicKeySpec(n, e))        


val encodedBase64PublicKey:String = Base64.getEncoder().encodeToString(thePublicKeyINeeded.encoded)
    var config = JWTAuthOptions(
                pubSecKeys = listOf(PubSecKeyOptions(
                    algorithm = "RS256",
                    publicKey = encodedBase64PublicKey)))
person Adnan Raza    schedule 05.07.2018