JWT(JSON Web Token) VS Session

基于session的用户认证

session用户认证流程

session认证优点

session认证缺点

基于jwt的认证流程

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)的优点都没发挥出来。

ref