JWT(JSON Web Token) VS Session
基于session的用户认证
session认证优点
session认证缺点
基于jwt的认证流程
简述:用户登录成功之后,服务端给用户浏览器返回一个token,以后用户浏览器要携带token再去向服务端发送请求,服务端校验token的合法性,合法则给用户看数据,否则,返回一些错误信息。
Q:传统token方式和jwt在认证方面有什么差异?
-
传统token方式:用户登录成功后,服务端生成一个随机token给用户,并且在服务端(数据库或缓存)中保存一份token,以后用户再来访问时需携带token,服务端接收到token之后,去数据库或缓存中进行校验,检查token的是否超时、是否合法。
-
jwt方式:用户登录成功后,服务端通过jwt生成一个随机token给用户(服务端无需保留token),以后用户再来访问时需携带token,服务端接收到token之后,通过jwt对token进行校验,检查是否超时、是否合法。
jwt原理
jwt token 格式
jwt token 生成规则
jwt使用场景
适合使用jwt的场景:
特点:有效期短、一次性、无状态。
举例:用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。
jwt认证优点
jwt认证缺点
而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。 基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。
开发常识:jwt的特点就是无状态、一次性,而有状态就用session,需要根据业务场景来选择。用jwt又存状态反而是两种方式(jwt和session)的优点都没发挥出来。