Oauth 2.0 怎么做http://jwt.io 检索密钥斗篷签名密钥?
我正在试用KeyClope OAUTH服务器(7.0.11),它似乎工作得很好,但我仍然对如何验证它生成的令牌感到困惑。例如,我生成了一个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证书端点检索公共签
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身份验证服务器没有报告密钥来验证令牌——特别是因为来自令牌的
和唯一的JWKS密钥匹配kid
- 如果我的头中没有任何要查询的
,如何查找公钥来检查签名jku
-----BEGIN CERTIFICATE-----
token signing public key
-----END CERTIFICATE-----
当然,可以使用自动完成这类工作的库
KeyClope的关键细节可能略有不同,例如:
- 开始/结束RSA密钥
所以我不应该通过证书验证我的访问令牌?或者我可以使用另一组参数通过证书而不是公钥进行验证吗?已解决:不久前已解决此问题,但忘记更新此线程:诀窍是查询主颁发者领域:
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证书。您好,谢谢您的回复,我将查看您的博客。不幸的是,我将我的证书粘贴到表单中,留下了现有的开始/结束分隔符行,这些行已经存在,用于显然正在工作的密钥。让我困惑的是,这些分隔线之间的内容是完全不同的键值。