首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取密钥披风的公钥

获取密钥披风的公钥
EN

Stack Overflow用户
提问于 2019-01-23 01:05:20
回答 4查看 25.1K关注 0票数 17

我意识到这个问题有很多次迭代。但我似乎不能正确理解答案。

我们已经使用oauth2 spring服务器类似于这个职位来保护我们的rabbitmq和rest端点。但它并没有我们所需要和想要的所有功能。所以我们想用键盘斗篷。我成功地保护了rest端点,只使用了SpringSecurity5.1的新版本,并指定了security.oauth2.Resoure.jwk.key-set-uri,并设置了必要的依赖项和配置。

在试图保护RabbitMQ时,我在从消息头上检查承载令牌时遇到了问题,因为keycloak端点没有返回真正的RSA公钥。

RabbitMQ使用CustomMessageListenerContainer从消息头获取令牌,并使用DefaultTokenServices检查令牌。

根据我的理解,使用键进行响应的端点是https://keycloak-server/auth/realms/my-realm/protocol/openid-connect/certs在此端点上执行HttpGet,我得到的响应如下所示

代码语言:javascript
运行
复制
{
    "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键。将其添加到一个org.springframework.security.jwt.codec.InvalidBase64CharacterException:中,最终会得到一个错误“由: RSAVerifier坏Base64输入字符小数点95在数组位置2引起”。

然而,如果我登录到keycloak管理页面,进入领域设置->键并单击公钥,弹出窗口显示公钥减去“-开始公钥--”和“-末端公钥-”页眉和页脚。硬编码,这使一切都能工作。

钥匙被编码了吗?我试过做Base64Utils.decodeFromUrlSafeString和Base64Utils.decodeFromString。第一个返回更小的东西,不像键那样打滑,然后创建一个非法的参数异常,非法的base64字符5f。

更新:返回的n是模的,e是公钥的公共指数。但是如何获得实际的键字符串呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-23 12:46:38

这些键也直接在https://keycloak-server/auth/realms/my-realm上,格式可以直接利用您的代码:

代码语言:javascript
运行
复制
{
  "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
}
票数 37
EN

Stack Overflow用户

发布于 2019-08-12 07:36:03

我也会在下面找到的:

  • 打开管理控制台
  • 选择境界
  • 选择领域设置
  • 打开标签‘键’
  • 打开标签‘活动’
  • 在“公钥”列中按“公钥”

  • 出现带有公钥的弹出窗口。
票数 9
EN

Stack Overflow用户

发布于 2019-01-23 10:55:39

toIntegerBytes 在base64编码之前,所以它不仅仅是base64解码。尝试:

代码语言:javascript
运行
复制
BigInteger modulus = new BigInteger(1, Base64.decodeBase64("n-value-here"));
BigInteger exponent = new BigInteger(1, Base64.decodeBase64("e-value-here"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54318633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档