我打算将JSON Web Tokens用于我在Angular 2中开发的新Web应用程序。 因为我在阅读一些教程之前没有使用过它,以了解它是如何工作的。 在在线资源中,我读到无担保的JWT在实践中很少见。 我想知道签名和加密是否会在以下(常见)用例中增加任何额外的安全性好处:
我正在开发一个应用程序,为拥有几个公司的公司生产价格卡/海报 消费电子产品商店。基本上所有用户都会向后端发送价格卡格式和一些格式化细节。 因此,后端生成PDF并将其返回给我的应用程序。
这是一个简单的应用程序,只有一个任务(我怀疑大多数Web应用程序都是这样的?)。 如果此应用程序通过安全的TLS连接提供,为什么要实现验证(签名)和安全性(加密)? 它不是多余的,只会使我的应用程序变慢吗? 或者签名和加密只是应尽可能实施的最佳做法?
答案 0 :(得分:2)
TLS提供安全的加密通道,但不对客户端进行身份验证(除了使用带有客户端证书的TLS的两种方式)。 Web应用程序必须在每个请求中发送身份验证证明:凭据或身份验证令牌
经典技术是将随机标识符作为标记,并维护已发布标记的列表,这是基于会话的系统的工作方式。
JWT优于基于会话的系统的主要优点是它不需要服务器存储。此外可以避免对数据库的查询,因为服务器可以依赖令牌声明。
在身份验证环境中, JWT必须签名,以便服务器可以信任该内容。如果没有,任何知道如何分配ID的人都可以创建假令牌。
只有在您希望将JWT的内容隐藏到客户端(通过TLS保护通道)时才需要加密,例如,如果包含敏感数据。主题sub
,到期日期exp
或发布商iss
等声明通常不敏感