我正试图了解this blog post about JOSE。在有关JWS的部分中,它表示以下内容:
在受保护的标头中包含公钥不仅会 服务器验证签名的能力,我们也将 确保它是正确的,因为受保护的标头是 完整性受保护!
示例对象的外观如下:
{
"payload": "eyAKICAgICAgICAiZnJvbSI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiQ2hlY2tpbmcgYWNjb3VudCIKICAgICAgICB9LAogICAgICAgICJ0byI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiU2F2aW5ncyBhY2NvdW50IgogICAgICAgIH0sCiAgICAgICAgImFtb3VudCI6IDI1MAogICAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9",
"protected": "eyAKICAgICAgICAiYWxnIjogIlJTMjU2IgogICAgfQ==",
"header": {
"signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU01Q"
}
}
受保护的标头是以下内容的base64url
编码:
{
"alg": "ES256"
}
我可以找到的唯一将公用密钥放入其中的参考是使用密钥ID字段kid
,如下所示:
{"alg":"RSA1_5","kid":"2011-04-29"}
这是帖子所指的吗?还是指其他东西(例如将整个公钥放入受保护的标头中,如:
{"alg":"RSA1_5","key":"somepublickeyhere"}
答案 0 :(得分:1)
您在正确的道路上。这篇文章可能指的是RFC-7515中定义的"jwk"
标头参数,如下所示:
“ jwk”(JSON Web密钥)标头参数是指 对应于用于对JWS进行数字签名的密钥。这个钥匙是 表示为JSON Web密钥。
JSON Web密钥(JWK)是RFC-7517中定义的JOSE的另一部分。它定义了如何以JSON格式表示加密密钥,以便可以将其传输,例如在JWS标头中。 JWK格式的RSA密钥可能如下所示:
{
"kty":"RSA",
"n": "0vx7 (...) DKgw",
"e":"AQAB",
"alg":"RS256",
"kid":"2011-04-29"
}
以及(如本文所述)带有密钥的(受保护的)JWS标头可能如下所示:
{
"alg": "RS256",
"jwk": {
"kty":"RSA",
"n": "0vx7 (...) DKgw",
"e":"AQAB",
"alg":"RS256",
"kid":"2011-04-29"
}
}