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