Oauth 2.0 怎么做http://jwt.io 检索密钥斗篷签名密钥?

Oauth 2.0 怎么做http://jwt.io 检索密钥斗篷签名密钥?,oauth-2.0,jwt,keycloak,Oauth 2.0,Jwt,Keycloak,我正在试用KeyClope OAUTH服务器(7.0.11),它似乎工作得很好,但我仍然对如何验证它生成的令牌感到困惑。例如,我生成了一个id_令牌,并将其粘贴到其中,其中显示格式良好的有效负载和以下标题: { “alg”:“RS256”, “典型”:“JWT”, “孩子”:” } 它还显示“签名已验证”,并以某种方式将有效的RSASA256公钥检索到jwt.io HTML页面中的相应表单中 我希望能够通过检查签名来验证令牌。我的理解是,我通过从KeyClope服务器JWKS证书端点检索公共签

我正在试用KeyClope OAUTH服务器(7.0.11),它似乎工作得很好,但我仍然对如何验证它生成的令牌感到困惑。例如,我生成了一个
id_令牌
,并将其粘贴到其中,其中显示格式良好的有效负载和以下标题:

{
“alg”:“RS256”,
“典型”:“JWT”,
“孩子”:”
}
它还显示“签名已验证”,并以某种方式将有效的RSASA256公钥检索到jwt.io HTML页面中的相应表单中

我希望能够通过检查签名来验证令牌。我的理解是,我通过从KeyClope服务器JWKS证书端点检索公共签名密钥来实现这一点:https:///auth/realms/core/protocol/openid-connect/certs. 结果对象包含一个键:

{
“孩子”:“,
“kty”:“RSA”,
“alg”:“RS256”,
“使用”:“sig”,
...
“x5c”:[“”],
...
}
很好,
kid
s匹配,但是
x5c
中的值与所显示的公钥不匹配,并且当我将
x5c
值粘贴到其位置时,表单显示签名无效。根据这个值,它应该已经是base64编码的(在我看来也是如此)

不幸的是,我无法将这个问题缩小到一个目标明确的问题。但是

  • 为什么我的keydape身份验证服务器没有报告密钥来验证令牌——特别是因为来自令牌的
    kid
    和唯一的JWKS密钥匹配
  • 如果我的头中没有任何要查询的
    jku
    ,如何查找公钥来检查签名
TIA每个人。

我有一个描述过程的报告。在粘贴到jwt.io之前,您所做的一切听起来都是正确的,除了用这些众所周知的分隔符包围键之外

-----BEGIN CERTIFICATE-----
token signing public key
-----END CERTIFICATE-----
当然,可以使用自动完成这类工作的库

KeyClope的关键细节可能略有不同,例如:

  • 开始/结束RSA密钥

我发现了一个有趣的解释——但不是一个完全正确的答案:在KeyClope服务器领域服务器设置上,有一个公钥和一个证书

公钥确实是验证我的访问令牌的正确值,以及当我加载我的访问令牌时jwt.io表单中显示的内容(仍然不知道它是如何检索的)

证书是我向证书端点/JWKS发出HTTP请求时返回的内容


所以我不应该通过证书验证我的访问令牌?或者我可以使用另一组参数通过证书而不是公钥进行验证吗?

已解决:不久前已解决此问题,但忘记更新此线程:诀窍是查询主颁发者领域:
https://:/auth/realms/
,它返回领域公钥:

{
  "realm": "testrealm",
  "public_key": "<THIS BIT HERE SNIPPED>",
  "token-service": "https://.../auth/realms/testrealm/protocol/openid-connect",
  "account-service": "https://.../auth/realms/testrealm/account",
  "tokens-not-before": 0
}
{
“领域”:“测试领域”,
“公钥”:“,
“令牌服务”:https://.../auth/realms/testrealm/protocol/openid-connect",
“帐户服务”:https://.../auth/realms/testrealm/account",
“不在之前的令牌”:0
}

该公钥是所有令牌的标志,而不是王国JWKS端点返回的x509证书。

您好,谢谢您的回复,我将查看您的博客。不幸的是,我将我的证书粘贴到表单中,留下了现有的开始/结束分隔符行,这些行已经存在,用于显然正在工作的密钥。让我困惑的是,这些分隔线之间的内容是完全不同的键值。