嵌套 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 令牌是不是有任何标准顺序?的主要内容,如果未能解决你的问题,请参考以下文章

结合 JWE 和 JWS

在 Spring Boot 中使用 Keycloak 实现 JWT、JWE 和 JWS(签名 JWT)

JSON Web Signature 规范解析

JWT在python中加密有效载荷? (JWE)

一篇文章带你分清楚JWT,JWS与JWE

JWT令牌的最大大小是多少?