Защищенный заголовок JWS
Я пытаюсь понять этот пост в блоге о Хосе. В части о 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"}
1 ответ
Вы на правильном пути. То, на что, вероятно, ссылается статья, это "jwk"
Параметр заголовка определен в RFC-7515 следующим образом:
Параметр заголовка "jwk" (веб-ключ JSON) - это открытый ключ, который соответствует ключу, используемому для цифровой подписи JWS. Этот ключ представлен в виде веб-ключа JSON.
JSON Web Key (JWK) является еще одной частью JOSE, определенной в RFC-7517. Он определяет, как представлять криптографические ключи в формате JSON, чтобы их можно было передавать, например, в заголовке JWS. Ключ RSA в формате JWK может выглядеть примерно так:
{
"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"
}
}