嵌套JWS和JWE令牌是否有任何标准顺序?

时间:2019-01-15 13:58:08

标签: json jwt jwe

我需要在软件的多个实例之间传递JSON编码的签名(有时还需要加密)的对象。显而易见的选择是JWT。

但是,JWT显然允许对令牌(JWS和JWE)进行签名和加密,或者将JWS嵌套到JWE中(嵌套的JWE)。

虽然这两种方法对我来说都是合理的,但是是否有“标准”的方式来做到这一点?我还没有找到任何细节。

1 个答案:

答案 0 :(得分:1)

简短答案

如果同时需要签名和加密,则应该首先对消息签名,然后再对结果进行加密。也就是说,将JWS嵌套到JWE中是一种有效的方法。

长答案

JSON Web Token(JWT)是一个开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。 JWT是以下标记类型的通用名称

  • JSON Web Signature(JWS):有效载荷经过了编码和签名,因此可以验证声明的完整性

    < / li>
  • JSON Web Encryption(JWE):它们的有效载荷是加密的,因此声明被其他方隐藏

JWT, JWS and JWE
图像是从此page中提取的。

  

JWT显然可以对令牌(JWS和JWE)进行签名和加密,也可以将JWS嵌套到JWE(嵌套JWE)中。

     

虽然这两种方法对我来说都是合理的,但是是否有“标准”的方式来做到这一点?我还没有找到任何细节。

嵌套的JWT 的概念在RFC 7519中定义:

  

其中采用了嵌套签名和/或加密的JWT。在   嵌套的JWT,将JWT用作   分别封装了JWS或JWE结构。

关于操作的顺序,建议先签名消息,然后加密结果,如同一文档中所述:

  

11.2. Signing and Encryption Order

     

从语法上讲嵌套的签名和加密操作   JWT 可以以任何顺序应用,只要签名和加密都可以   必要时,通常生产者应该在消息上签名,然后   加密结果(从而加密签名)。这样可以防止   剥夺签名的攻击,仅留下加密的   消息,以及为签名者提供隐私。此外,   在许多情况下,加密文本上的签名被认为无效   司法管辖区。