概述:Session&Cookie&Token
Cookie:存储于客户端浏览器中的一种key-value形式数据,用于表示某用户身份,浏览器为确保cookie不被恶意使用,对于同一域的cookie数量有限制;
Session:存储于服务端中对每一客户端的“身份标识”,当客户端请求时通常需要携带该“身份标识”,以便服务器用于区分,其中当web服务器使用了负载均衡时,当接收请求时发送至另一服务器时会导致session丢失;
Token:作为多用户下处理认证的身份验证方式,具有无状态、可扩展、支持移动设备、跨程序调用的特性,例如脸书、推特、谷歌、github等;
基于服务器的验证方式:HTTP协议是无状态协议,因此使得每一次请求都需要去验证一次用户身份,通常采取session解决该问题,存在以下缺陷:
1.存储花销:每次用户请求时产生的session会导致服务器的开销不断加大;
2.CORS跨域资源共享:当需要让数据在跨多台移动设备同时使用,存在CORS问题
3.CSRF跨站请求伪造:用户在请求资金相关网站时,会容易承担到请求伪造的攻击,借助身份去访问其它网站
基于Token的验证原理:
1.基于token的身份验证也是无状态的,不需要将用户信息存储于服务器,解决了存储花销的问题;
2.可以防止CSRF(跨站请求伪造),同时token具有时效性且具有撤回功能,可以通过token revocation 使指定token无效
3.可创建与其他程序的权限共享,构建API调整token权限
4.具备多平台跨域,用户通过验证的token后,数据与资源可在任何域被请求。
基于token身份验证的流程如下:
1.用户通过用户名与密码发送请求信息
2.网站实现验证
3.网站返回一个携带签名的token给客户端
4.客户端存储token,
5.客户端每次请求中在HTTP头部中添加token
6.服务器验证token并处理请求和返回数据
注意:设置服务器属性Access-Control-Allow-Origin:* ,可简称ACAO头部,让服务器能接受到来自所有域的请求,且不得带有HTTP认证、客户端SSL证书、cookies证书。