1.传统的session校验机制
①用户向服务器发送用户名和密码
②验证服务器后,用户信息将保存到session中
③服务器会把session_id写入到用户的Cookie。
④用户后续每个请求都将通过在Cookie中取出session_id传给服务器
⑤服务器收到session_id并对比之前保存的数据,确认用户的身份。
##
这种模式最大的问题是,没有分布式架构,无法支持横向扩展。
如果是单服务器部署,该模式完全没有问题。
但是,如果它是服务器集群部署的话,则不能满足要求。
2.简单token校验机制(需要分布式数据库占用服务器性能)
基于token的认证:近些年来基于token的认证开始成为主流,比较简单的token就是使用一个全局唯一的字符串用来标识哪些是用户,然后把这个字符串key=token,value=userId存在Redis中,每次请求的时候拦截,判断Redis中是否有这个Token或者是其他的一些校验,如果满足才能访问我们后续的业务功能。
##
这种模式的话需要一个统一的token数据库(一般使用redis来存储)来保存会话数据实现共享,这样负载均衡下的每个服务器才可以正确的验证用户身份。
3.基于JWT的校验机制
基于token的校验机制类似于http协议的无状态,它不需要在服务端去保留用户的认证信息或者是会话信息。这就意味着JWT认证机制的应用不需要去考虑用户在哪一台服务器上登录了,这就为应用的扩展提供了便利。
流程是这样的:
用户使用用户名密码来请求服务器登录
服务器进行验证用户的信息
服务器通过验证发送给用户一个JWT
客户端存储JWT,并在每次请求时附送上这个JWT值
服务端验证JWT值,通过后放行处理具体业务
4.JWT是什么
JWT全称JSON Web Tokens,是一种规范化的token。是对token这一技术提出一套规范,只有满足规范才能使用。可实现跨域验证