【发布时间】:2020-12-26 02:45:36
【问题描述】:
我正在尝试使用 Keycloak OAUTH 服务器 (7.0.11),它似乎运行良好,但我仍然对如何验证它生成的令牌感到困惑。例如,我生成了一个id_token 并将其粘贴到http://jwt.io 中,它显示了一个格式良好的有效负载和以下标头:
{
"alg": "RS256",
"typ": "JWT",
"kid": "<my-key-id>"
}
它还显示“签名验证”,并以某种方式将有效的 RSASHA256 公钥检索到 jwt.io HTML 页面中的适当形式。
我希望能够通过检查签名自己验证令牌。我的理解是,我通过从 keycloak 服务器 JWKS 证书端点检索公共签名密钥来做到这一点:https://
{
"kid":"<matches-my-key-id-above>",
"kty":"RSA",
"alg":"RS256",
"use":"sig",
...
"x5c":["<snip>"],
...
}
kids 匹配很好,但x5c 中的值与http://jwt.io 显示的公钥不匹配不,当我将x5c 值粘贴到它的位置时表格说签名无效。根据https://www.rfc-editor.org/rfc/rfc7517,该值应该已经是base64编码的(在我看来也是如此)。
很遗憾,我无法将其缩小为一个针对性很强的问题。但是……
- 为什么我的 keycloak 身份验证服务器报告的密钥没有验证令牌 - 特别是因为来自令牌的
kid和唯一的 JWKS 密钥匹配? - 如果我的标头不包含任何要查询的
jku,http://jwt.io 如何找到任何公钥来检查签名?
TIA 大家。
【问题讨论】: