Api 使用JWE或JWS的优缺点是什么

Api 使用JWE或JWS的优缺点是什么,api,security,authorization,access-token,jwt,Api,Security,Authorization,Access Token,Jwt,我正在尝试实现一个身份验证令牌系统,因此我想知道使用JSON Web加密(JWE)或JSON Web签名(JWS)的优缺点,以及两者都使用(JWS中的JWE)是否有意义。JWS和JWE之间的目的不同。 JWS用于签署声明,JWE用于传输敏感数据 若要实现身份验证系统,则必须使用JWS来验证声明的真实性 如果JWS中的某些声明包含敏感信息,还可以使用JWE对JWS进行加密 但是,在您的上下文中,仅使用JWE是没有意义的。JSON Web签名(JWS)声明使用可由服务器使用秘密签名密钥验证的签名进行

我正在尝试实现一个身份验证令牌系统,因此我想知道使用JSON Web加密(JWE)或JSON Web签名(JWS)的优缺点,以及两者都使用(JWS中的JWE)是否有意义。

JWS和JWE之间的目的不同。 JWS用于签署声明,JWE用于传输敏感数据

若要实现身份验证系统,则必须使用JWS来验证声明的真实性

如果JWS中的某些声明包含敏感信息,还可以使用JWE对JWS进行加密


但是,在您的上下文中,仅使用JWE是没有意义的。

JSON Web签名(JWS)声明使用可由服务器使用秘密签名密钥验证的签名进行签名。这确保了在客户端和服务器之间传递声明时不会受到影响。JWS令牌的内容是Base64编码的,而不是加密的(记住编码不同于加密!)。Base64编码的数据看起来是加密的,因为它看起来像垃圾文本,但实际上,将其转换回可读数据非常简单。因此,建议始终不要在JWT中包含任何敏感信息。建议仅当您希望在双方(或客户端和服务器之间)之间交换信息,并且令牌中没有敏感数据作为有效负载传递时,才使用JWT

但是,如果您想在令牌中包含任何私有信息,该怎么办?您不希望您的敏感信息出现在一个令牌中,该令牌仅采用Base64编码,任何攻击者都可以轻松解码。幸运的是,有一种方法可以使用另一种更安全的保护级别(称为JSON Web Encryption(JWE))来加密和保护索赔数据。它定义了一种加密索赔数据的方法(基本上是基于JSON的数据结构),这样只有预期的接收者才能读取令牌中的信息

处理web令牌的最佳方法是

  • 签名,这样就可以知道令牌来自授权客户端
  • 对其进行加密,以便只有经过授权的服务器才能知道其内容
我们有两个很好的Java库,可以加密JSON Web令牌:


  • 上述两个库都是JWT和JOSE(Javascript对象签名和加密)规范套件的开源(apache2.0)实现。它们都是高质量的库,你不会真的做出错误的选择。但是,JWT.IO有一个很好的UI来显示每个可用库的差异。

    使用JWS对数据进行签名,使其具有完整性保护,这意味着:

    • 中间人攻击可以查看数据的内容
    • 中间人攻击无法修改它,因为签名验证将失败
    JWE用于加密数据并保护其完整性

    • 中间人攻击无法查看数据的内容
    • 中间人攻击无法修改它,因为验证将失败

    那么jwe就是加密的jwt令牌(jws)?本文将深入探讨这两者