嵌套 JWS 和 JWE 令牌是不是有任何标准顺序?
Posted
技术标签:
【中文标题】嵌套 JWS 和 JWE 令牌是不是有任何标准顺序?【英文标题】:Is there any standard order for nesting JWS and JWE tokens?嵌套 JWS 和 JWE 令牌是否有任何标准顺序? 【发布时间】:2019-06-09 13:16:58 【问题描述】:我需要在我的软件的多个实例之间传递 JSON 编码的签名(有时还额外加密)对象。这里显而易见的选择是 JWT。
然而,JWT 显然允许签名和加密令牌(JWS 和 JWE)或将 JWS 嵌套到 JWE(嵌套 JWE)中。
虽然这两种方法对我来说似乎都是合理的,但是否有一种“标准”的方式来做到这一点?我还没有找到任何细节。
【问题讨论】:
【参考方案1】:简答
当签名和加密都需要时,您应该首先对消息进行签名,然后对结果进行加密。也就是说,将 JWS 嵌套到 JWE 中是一种有效的方法。
长答案
JSON Web Token (JWT) 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。 JWT 是以下类型令牌的通用名称:
JSON Web Signature (JWS):负载经过编码和签名,因此可以验证声明的完整性。
JSON Web Encryption (JWE):它们的有效负载是加密的,因此声明对其他方隐藏。
图片是从这个page中提取的。
显然,JWT 允许签名和加密令牌(JWS 和 JWE)或将 JWS 嵌套到 JWE(嵌套 JWE)中。
虽然这两种方法对我来说似乎都是合理的,但是否有一种“标准”的方式来做到这一点?我还没有找到这方面的任何细节。
嵌套JWT的概念在RFC 7519中定义:
采用嵌套签名和/或加密的 JWT。在 嵌套的 JWT,一个 JWT 被用作一个有效载荷或明文值 分别包含 JWS 或 JWE 结构。
关于操作的顺序,建议先对消息签名,然后对结果进行加密,如同一文档中所述:
11.2. Signing and Encryption Order
虽然从语法上讲,嵌套的签名和加密操作 JWTs 可以按任何顺序应用,如果签名和加密都是 必要的,通常生产者应该在消息上签名,然后 加密结果(从而加密签名)。这可以防止 剥离签名的攻击,只留下一个加密的 消息,以及为签名者提供隐私。此外, 加密文本上的签名在许多情况下被认为是无效的 司法管辖区。
【讨论】:
以上是关于嵌套 JWS 和 JWE 令牌是不是有任何标准顺序?的主要内容,如果未能解决你的问题,请参考以下文章