Keycloak 获取keydove';s公钥
我意识到这个问题有很多重复。但我似乎不能正确理解答案 我们已经用oauth2 spring服务器保护了rabbitmq和rest端点。但它并没有我们需要和想要的所有功能。所以我们想用钥匙斗篷。我已经成功地保护了rest端点,只需转到新版本的SpringSecurity5.1,指定security.oauth2.resource.jwk.key-set-uri并设置必要的依赖项和配置 在尝试保护RabbitMQ时,我在检查消息头中的承载令牌时遇到了问题,因为KeyClope jwks端点没有返回真正的RSA公钥 RabbitMQ使用从消息头获取令牌,并使用DefaultTokenServices检查令牌 根据我的理解,用键响应的端点是 在这个端点上执行HttpGet,我会得到如下响应Keycloak 获取keydove';s公钥,keycloak,Keycloak,我意识到这个问题有很多重复。但我似乎不能正确理解答案 我们已经用oauth2 spring服务器保护了rabbitmq和rest端点。但它并没有我们需要和想要的所有功能。所以我们想用钥匙斗篷。我已经成功地保护了rest端点,只需转到新版本的SpringSecurity5.1,指定security.oauth2.resource.jwk.key-set-uri并设置必要的依赖项和配置 在尝试保护RabbitMQ时,我在检查消息头中的承载令牌时遇到了问题,因为KeyClope jwks端点没有返回真
{
"keys": [{
"kid": "7JUbcl_96GNk2zNh4MAORuEz3YBuprXilmTXjm0gmRE",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "nE9gEtzZvV_XisnAY8Hung399hwBM_eykZ9J57euboEsKra8JvDmE6w7SSrk-aTVjdNpjdzOyrFd4V7tFqev1vVJu8MJGIyQlbPv07MTsgYE5EPM4DxdQ7H6_f3vQjq0hznkFvC-hyCqUhxPTXM5NgvH86OekL2C170xnd50RLWw8FbrprP2oRjgBnXMAif1Dd8kwbKKgf5m3Ou0yTVGfsCRG1_LSj6gIEFglxNHvGz0RejoQql0rGMxcW3MzCvc-inF3FCafQTrG5eWHqp5xXEeMHz0JosQ7BcT8MVp9lHT_utiazhQ1uKZEb4uoYOyy6mDDkx-wExpZkOx76bk_Yu-N25ljY18hNllnV_8gVMkX46_vcc-eN3DRZGNJ-Asd_sZrjbXbAvBbKwVxZeOTaXiUdvl8O0G5xX2xPnS_WA_1U4b_V1t28WtnX4bqGlOejW2kkjLvNrpfQ5fnvLjkl9I2B16Mbh9nS0LJD0RR-AkBsv3rKEnMyEkW9UsfgYKLFKuH32x_CXi9uyvNDas_q8WS3QvYwAGEMRO_4uICDAqupCVb1Jcs9dvd1w-tUfj5MQOXB-srnQYf5DbFENTNM1PK390dIjdLJh4k2efCJ21I1kYw2Qr9lHI4X2peTinViaoOykykJiol6LMujUcfqaZ1qPKDy_UnpAwGg9NyFU",
"e": "AQAB"
}
]
}
根据我的理解,键为“n”的字段应该是RSA256键。将其添加到RSAVifier最终会得到一个错误“由以下原因引起:org.springframework.security.jwt.codec.InvalidBase64CharacterException:Bad Base64数组位置2中的输入字符十进制95。”
但是,如果我登录到keydove管理页面,进入领域设置->密钥并单击公钥,则弹出窗口显示公钥减去“----开始公钥----”和“----结束公钥----”页眉和页脚。硬编码这使一切工作
钥匙编码了吗?
我尝试过使用Base64Utils.decodeFromUrlSafeString和Base64Utils.decodeFromString。第一个返回较小的值,并且不喜欢该键,第二个创建非法参数异常非法base64字符5f
更新:
返回的n是模,e是公钥的公指数。但是如何获得实际的密钥字符串呢?有
到integerbytes
,所以它不仅仅是base64解码。尝试:
BigInteger modulus = new BigInteger(1, Base64.decodeBase64("n-value-here"));
BigInteger exponent = new BigInteger(1, Base64.decodeBase64("e-value-here"));
密钥也可以直接打开,其格式可通过代码直接利用:
{
"realm": "my-realm",
"public_key": "MIIBI...",
"token-service": "https://keycloak-server/auth/realms/my-realm/protocol/openid-connect",
"account-service": "https://keycloak-server/auth/realms/my-realm/account",
"tokens-not-before": 0
}
我还会在以下网站上找到它:
- 打开管理控制台
- 选择领域
- 选择领域设置
- 打开选项卡“键”
- 打开“活动”选项卡
- 在“公钥”列中,按“公钥”
- 此时会出现一个带有公钥的弹出窗口李>
keydepose管理客户端
,当我调用keydepose.realm(realm.toRepresentation().getPublicKey()
时,它给出空值。我检查了一下,它调用了/admin/realms/realmname
,而不是/auth/realms/realmname
。好的,我找到了:keydove.realm(realm.keys().getKeyMetadata().getKeys()