0

我必须创建一个 JWS 签名,并且 JOSE 标头必须如下所示:

{
  "alg": "HS256",
  "kid": "V3vEe66RJm85eD72",
  "b64": false,
  "http://openbanking.org.uk/iat": 1501497671,
  "http://openbanking.org.uk/iss": "C=UK, ST=England, L=London, O=Acme Ltd.",
  "crit": ["b64","http://openbanking.org.uk/iat","http://openbanking.org.uk/iss"]
}

我必须在哪里将此标头放在jwt.io网站中,或者有人知道其他用于创建 jws 签名的好网站吗?问题是,当我使用文档提供的标头类型更改 jwt.io 中默认存在的标头时,它在 jwt.io 底部的“无效签名”中说,为什么?

4

1 回答 1

1

您可以将标头添加到jwt.io调试器右列的“HEADER”部分。

然后在“验证签名”下的字段中添加一个秘密并获得一个令牌。您的JOSE 标头包含一个暴击声明,这会导致“无效签名”:

“crit”(关键)标头参数表示正在使用对本规范和/或 [JWA] 的扩展,必须理解和处理这些扩展。它的值是一个数组,列出了使用这些扩展的 JOSE Header 中存在的 Header Parameter 名称。 如果接收方不理解和支持任何列出的扩展头参数,则 JWS 无效

签名本身很好,只是crit声明导致了无效的签名错误。一旦您有crit一个非空列表的声明,jwt.io 上的验证就会失败。

您可以验证生成的令牌

eyJhbGciOiJIUzI1NiIsImtpZCI6IlYzdkVlNjZSSm04NWVENzIiLCJiNjQiOmZhbHNlLCJodHRwOi8vb3BlbmJhbmtpbmcub3JnLnVrL2lhdCI6MTUwMTQ5NzY3MSwiaHR0cDovL29wZW5iYW5raW5nLm9yZy51ay9pc3MiOiJDPVVLLCBTVD1FbmdsYW5kLCBMPUxvbmRvbiwgTz1BY21lIEx0ZC4iLCJjcml0IjpbImI2NCIsImh0dHA6Ly9vcGVuYmFua2luZy5vcmcudWsvaWF0IiwiaHR0cDovL29wZW5iYW5raW5nLm9yZy51ay9pc3MiXX0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.QrI016I1j2kKE-cth3xr8O5DUOLOrL-biUfkuVZb_Xo

(使用秘密“秘密”创建)在https://www.jsonwebtoken.io/上,并查看它可以被验证。该网站似乎不关心crit标头,仅基于散列进行检查。(注意:本网站在解码后未显示您的令牌的正确标头和有效负载)

一般来说,你不应该把这些在线工具看得太严重。它们用于测试和教育目的,而不是作为生产工具。

于 2020-10-09T11:36:47.547 回答