一、cookie/session登陆方式
1.客户端向服务器端发送请求,携带用户名、密码等信息
2.服务器端收到请求后,创建session存在redis里,并生成一个唯一标志符,放在响应头中
3.客户端解析响应头的信息,存在cookie里,之后发请求都携带
服务器端可以设置httpOnly:true为只读,不让客户端修改
cookie 有 path 概念,子路径可以访问父路径 cookie,父路径不能访问子路径 cookie
数据存放在redis里,会对服务器产生一定压力,但可以快速禁用某个用户
如果不是https协议下使用cookie,容易受到CSRF跨站点请求伪造攻击(headers->Referer)
二、Token
1.客户端携带用户名密码发送请求
2.服务器收到请求,验证成功后,会签发一个token,并发送给客户端
3.token存在客户端中,比如Local Storage,之后再发送请求都要携带token
4.服务器验证token(request头部添加Authorization),如果验证成功,就请求的数据,否则返回401错误码,鉴权失败。
缺点:加密、解密token相比session来说更消耗性能;
token数据量更大,更占带宽
优点:token可以用于多种客户端,且没有跨域限制
三、JWT(JSON Web Token)
服务器认证之后,生成一个JSON对象,签名加密后返回给用户。之后每次请求客户端都带着这个令牌
这个json对象由三部分构成:header、负载(实际需要传递的数据:用户名等身份信息)、签名
缺点:由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑
三、SSO单点登录
1.用户访问系统A,判断未登录,则重定向到SSO
2.访问SS,发现没有凭证则要输入用户名密码
3.服务端校验用户名密码成功后,返回ticket(一种凭证)
4.客户端存储下来,之后携带凭证去访问A系统
5.A系统拿凭证去问SSO校验知否通过
6.SSO校验通过返回给A系统用户信息,之后A系统可以处理业务
四、扫码登陆
1.pc端访问服务器获得二维码信息(数据、状态、过期时间)
2.pc端生成二维码,开始轮训问服务器二维码的状态信息
3.手机端扫码,将手机端token和二维码信息发送给服务器,确认登陆
4.服务端校验手机端token,并生成pc端token
5.pc获取到二维码的状态为成功登陆,之后拿到pctoken,登陆成功