如何从Keycloak openid-connect cert api解码密钥

avi*_*ney 8 public-key jwt openid-connect keycloak

我正在尝试从Keycloak open-id连接证书端点获取密钥,这允许我验证JWT令牌.用于获取键缝的api工作:

GET http://localhost:8080/auth/realms/my-realm/protocol/openid-connect/certs

{
 "keys": [
   {
     "kid": "MfFp7IWWRkFW3Yvhb1eVrtyQQNYqk6BG-6HZFpl_JxI",
     "kty": "RSA",
     "alg": "RS256",
     "use": "sig",
     "n": "qDWXUhNtfuHNh0lm3o-oTnP5S8ENpzsyi-dGrjSeewxV6GNiKTW5INJ4hDQ7ZWkUFfJJhfhQWJofqgN9rUBQgbRxXuUvEkrzXQiT9AT_8r-2XLMwRV3eV_t-WRIJhVWsm9CHS2gzbqbNP8HFoB_ZaEt2FYegQSoAFC1EXMioarQbFs7wFNEs1sn1di2xAjoy0rFrqf_UcYFNPlUhu7FiyhRrnoctAuQepV3B9_YQpFVoiUqa_p5THcDMaUIFXZmGXNftf1zlepbscaeoCqtiWTZLQHNuYKG4haFuJE4t19YhAZkPiqnatOUJv5ummc6i6CD69Mm9xAzYyMQUEvJuFw",
     "e": "AQAB"
   }
 ]
}
Run Code Online (Sandbox Code Playgroud)

但关键在哪里,如何解码呢? $.keys[0].n看起来不像base64,我无法弄清楚它是什么?...如果有人能告诉我如何从该有效载荷中获取公钥,那就太棒了!

avi*_*ney 6

查看https://github.com/keycloak/keycloak/blob/master/core/src/main/java/org/keycloak/jose/jwk/JWKParser.java,返回密钥的接缝是pem编码的,使用:

  • modulus
  • exponent

查看提到的java类以获取java或https://github.com/tracker1/node-rsa-pem-from-mod-exp中的公钥以获取javascript中的公钥.