微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Keycloak 中没有找到孩子错误的 publicKey 是什么意思

如何解决在 Keycloak 中没有找到孩子错误的 publicKey 是什么意思

在 Keycloak 中没有找到 publicKey for Kid 错误意味着什么

int[] costArray = new int[]{3,5,9,10,11,13};
int[] numTypeIndarray = new int[]{1,2,4,7,15};
int[] numTypeCumulArray = new int[]{1,3,14,25,40};

int[] indItemCostArray = new int[numTypeCumulArray[6]];

for (int i = 0; i < indItemCostArray.length; i++) {
    for (int j = 0; j < numTypeIndarray[i]; j++) {
        indItemCostArray[i+j] = costArray[j];
    }
}

解决方法

该服务正在验证 JWT 的完整性,但失败了。
验证是通过根据 JWT 的标头和正文重新计算签名并将其与 JWT 中显示的签名进行比较来完成的。如果计算出的签名与 JWT 中的签名匹配,则 JWT 肯定来自预期的一方,并且没有第 3 方对其进行修改(尽管第 3 方可以看到它!)。
为了生成签名,在最常见的方法 RS256 的情况下,需要一个密钥。该密钥只能从令牌的发行者那里获得,以保证验证过程的正确性。出于这个原因,令牌仅在 Kid 字段中保存该键的引用 ID。

您的情况下的默认证书 URL 应为: https://foo.baz.com/auth/realms/sso/protocol/openid-connect/certs 响应应该包含一个类似于 Google's cert endpoint:

的响应的键数组
{
  "keys": [
    {
      "kty": "RSA","alg": "RS256","e": "AQAB","n": "nQPB_WqGG18pjGSFGQwRLcZkcRojHHweN27mV1oTNeeH2quq5NvWibLEheiukVP60nXcGNpkP_PaycYahEfvAnJGLX_IscGAOJ67WWFs4M8wXHH6g2mTnalcAYgmpN1QDMVgz4NcWISXNTR-8FZfWgFN4LDZgK4f0wXOaJlh_Bzh-plPLJQUXyY7mZTEVsH8X3wg2fvV0Hxj_HudjgFlYPdDri1Oi4vI0wiKV4nJCRZ-INH3OIvPl-05WVjZ-XTSXdNjLNx35NM2Npcrr9VpZ8Xeg7pr0wjamqd_07xfEAdtFxsN6Ay6Ecz3k0onQP-6SLRCGLrMAxifziivmmafCQ","use": "sig","kid": "7f548f6708690c21120b0ab668caa079acbc2b2f"
    },{
      "n": "psh4_fDTsNZ1JkC2BV6nsU7681neTu8D37bMwTzzT-hugnePDyLaR8a_2HnqJaABndr0793WQCkiDolIjX1wn0a6zTpdgCJL-vaFe2FqPg19TWsZ8O6oKZc_rtWu-mE8Po7RGzi9qPLv9FxJPbiGq_HnMUo0EG7J4sN3IuzbU--Wmuz8LWALwmfpE9CfOym8x5GdUzbDL1ltuC2zXCaxARDnPs6vKR6eW1MZgXqgQ6ZQO9FklH_b5WJYLBDmHAb6CguoeU-AozaoVrBHgkWoDkku7nMWoetULtgBP_tYtFM8zvJ9IDD6abZM0jl-bsHIm3XFz0MgAJ9FmPti9-iShQ","kty": "RSA","kid": "3df0a831e093fae1e24d77d47834405f95d17b54","use": "sig"
    }
  ]
}

在正常情况下,可以在此响应中找到来自 JWT 的孩子,因此,可以通过对应的“n”字段的值来计算签名。但在你的情况下,孩子不在那里。

这种情况下的常见问题:

  • keycloak 领域中引入了一个新密钥,并且孩子正在引用旧密钥
  • openid-configuration 的 URL 不正确
  • keycloak前面有缓存层,所以openid-configuration的响应不是最新的
  • 被泄露的/第三方修改的令牌

参考:AdapterTokenVerifier jwt.io

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?