繁体   English   中英

使用JWE或JWS的利弊是什么

[英]What are the pros/cons of using JWE or JWS

我正在尝试实现身份验证令牌系统,所以我想知道使用JSON Web加密(JWE)或JSON Web签名(JWS)的优点/缺点,以及是否有必要同时使用两者(JWS中的JWE )。

JSON Web签名(JWS)声明使用签名进行签名,服务器可以使用秘密签名密钥对签名进行签名。 这样可以确保在客户端和服务器之间传递声明时不会对其进行调整。 JWS令牌的内容是Base64编码的,并且未加密( 请记住编码与加密不同! )。 Base64编码的数据看起来像是垃圾文本,因此看起来像是经过加密的,但是转回可读数据实际上很简单。 因此,始终建议不要在JWT中包含任何敏感信息。 建议仅在要在两方之间(或在客户端和服务器之间)交换信息并且不将任何敏感数据作为令牌中的有效负载传递时,才使用JWT。

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

处理网络令牌的最佳方法是

  • 对其进行签名,以便众所周知该令牌源自授权客户端。
  • 对其进行加密,以便只有授权的服务器才能知道其内容。

我们有一些Java可用的优秀库可以加密您的JSON Web令牌:

  1. 何塞4J
  2. 雨云-JOSE-JWT

以上两个库都是JWT和JOSE(Javascript对象签名和加密)规范套件的开源(Apache 2.0)实现。 它们都是高质量的库,您真的不能做出错误的选择。 但是,JWT.IO有一个不错的UI,可以显示每个可用库的差异。

JWS用于签名数据,使其受到完整性保护,这意味着:

  • 中间人攻击可以查看数据的含义
  • 中间人攻击无法对其进行修改,因为签名验证将失败

JWE用于加密数据并使其具有完整性保护

  • 中间人攻击无法查看数据到底是什么
  • 中间人攻击无法修改它,因为验证将失败

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

如果要实现认证系统,那么必须使用JWS来验证声明的真实性。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM