1

我试图理解这篇关于 JOSE 的博客文章。在关于 JWS 的部分中,它说如下:

在受保护的标头中包含公钥不仅可以使服务器能够验证签名,而且我们还将确保它是正确的,因为受保护的标头是完整性保护的!

这是示例对象的样子:

{
    "payload": "eyAKICAgICAgICAiZnJvbSI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiQ2hlY2tpbmcgYWNjb3VudCIKICAgICAgICB9LAogICAgICAgICJ0byI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiU2F2aW5ncyBhY2NvdW50IgogICAgICAgIH0sCiAgICAgICAgImFtb3VudCI6IDI1MAogICAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9",
    "protected": "eyAKICAgICAgICAiYWxnIjogIlJTMjU2IgogICAgfQ==",
    "header": {
        "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU01Q"
    }
}

受保护的标头是以下base64url编码:

{ 
    "alg": "ES256"
}

我能找到的将公钥放入其中的唯一参考是使用 key id 字段kid,如下所示:

{"alg":"RSA1_5","kid":"2011-04-29"}

这是帖子所指的吗?还是它指的是其他东西(例如将整个公钥放入受保护的标头中:

{"alg":"RSA1_5","key":"somepublickeyhere"}
4

1 回答 1

2

你走在正确的道路上。文章所指的大概是RFC-7515"jwk"中定义的header参数如下:

“jwk”(JSON Web 密钥)标头参数是与用于对 JWS 进行数字签名的密钥对应的公钥。此密钥表示为 JSON Web 密钥。

JSON Web Key (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"
  }
}
于 2018-10-19T13:26:39.263 回答