刚刚了解了 JOSE,我知道 JWE 用于加密,JWS 用于签名。我似乎无法找到一个既加密又签名的有效负载示例。
假设我有一个 payload hello world
。做这样的事情是正确的吗?JWS(JWE('hello world')
将加密的 JWE 作为 JWS 的有效负载?
刚刚了解了 JOSE,我知道 JWE 用于加密,JWS 用于签名。我似乎无法找到一个既加密又签名的有效负载示例。
假设我有一个 payload hello world
。做这样的事情是正确的吗?JWS(JWE('hello world')
将加密的 JWE 作为 JWS 的有效负载?
JSON Web Token (JWT) 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。JWT 是以下类型令牌的通用名称:
JSON Web 签名(JWS):有效负载经过编码和签名,因此可以验证声明的完整性。
JSON Web 加密(JWE):它们的有效负载是加密的,因此对其他方隐藏声明。
图像是从这个页面提取的。
做这样的事情是正确的吗?
JWS(JWE('hello world')
将加密的 JWE 作为 JWS 的有效负载?
它是一个嵌套的 JWT,它的概念在RFC 7519中定义:
使用嵌套签名和/或加密的 JWT。在嵌套 JWT 中,JWT 分别用作封闭 JWS 或 JWE 结构的有效负载或明文值。
您可以添加 JWE 作为 JWS 有效负载的声明,但建议使用其他方式:首先签署消息,然后加密结果,如同一文档中所述:
虽然在语法上可以按任何顺序应用嵌套 JWT的签名和加密操作,但如果需要签名和加密,通常生产者应该对消息进行签名,然后对结果进行加密(从而加密签名)。这可以防止剥离签名的攻击,只留下加密的消息,并为签名者提供隐私。此外,在许多司法管辖区,加密文本上的签名被认为是无效的。