HTTP身份认证
1、HTTP Basic认证
用户每次发送请求的时候,在请求头中携带能通过认证的身份信息;Authorization: <username>:<password>
1.1 交互过程
① 客户端发起请求,未携带身份信息的请求;
② 服务端返回401 Unauthorized状态,并在返回头中说明要用Basic方法进行认证:WWW-Authenticate:Basic;
③ 客户端发起请求,并在请求头中携带身份信息:Authorization:Basic password;
④ 服务端验证请求头中的身份信息,并相应地返回200或者403状态码;
⑤ 之后,客户端每次请求都在请求头中携带身份信息;
1.2 优缺点
优点:
简单,容易理解;
缺点:
不安全,认证身份用明文传输,需要配合https使用;
效率低,服务端处理请求的时候,每次都要验证身份信息:用户名、密码;
2、Session 认证
结合了session和cookie。服务端将本次会话信息以session对象的形式保存在服务端的内存、数据库或系统文件中,并将对应的session的对象ID值以cookie的形式返回给客户端。sessionID保存在客户端的cookie中。
是一种有状态的认证方法,服务端保存session对象,客户端以cookie形式保存sessionid。
2.1 交互过程
① 客户端在登录页面输入身份信息,如用户名、密码;
② 服务端验证身份信息,通过后生成一个session对象,保存到服务端,并将sessionid值以cookie的形式返回给客户端;
③ 客户端将接收到的sessionid保存到cookie中,并且之后的每次请求都在请求头中携带sessionid cookie;
④ 服务端从请求的cookie中获取sessionid,并查询其对应的session对象,从而获得身份信息;
⑤ 客户端退出本次会话后,客户端删除sessionid和cookie,服务端删除session对象;
⑥ 客户端重新登录,生成新的session对象和sessionid;
2.2 优缺点
优点:
较安全:客户端每次请求时无需发送身份信息,只需要发送sessionid;
较高效:服务端无需每次处理请求时验证身份信息,只需通过sessionid查询session对象;
缺点:
扩展性差:session对象保存在服务端,如果保存在多个服务器上,有一致性问题,如果保存在单个服务器上,无法适应用户增长;
基于cookie的sessionid不能跨域共享,同一用户的多个客户端不能共享sessionid;
基于cookie的sessionid容易被截获生成csrf攻击;
3、token认证
是一种无状态的认证方法,是SPA应用和APP经常使用的认证方法;
客户端首先将用户信息发送给服务端,服务端根据用户信息+私钥生成一个唯一的Token并返回给客户端。Token只保存在客户端,之后,客户端的每个请求头都携带token,而服务端只通过运算来验证用户;
最新文章
- Web开发安全之文件上传安全
- js数组与对象性能比较
- Visual Studio 2015无法进行Package Restore的原因和解决方案
- Linux 常用命令小结
- 细心看完这篇文章,刷新对Javascript Prototype的理解
- 喜讯!Ubuntu 16.10(Yakkety Yak) Final Beta发布喽!!!
- 不能使用weak修饰进行声明的类
- Emacs 配置 Python 编程环境
- MySQL的联结(Join)语法
- HDU 3362 Fix
- mysql 查看表的类型(转)
- 【PYTHON】三级菜单
- Python 正则表达式 flags 参数
- BZOJ4356Ceoi2014 Wall——堆优化dijkstra+最短路树
- vue-router拦截
- https 对 json空对象解析的影响
- kafka8 编写简单消费者
- Linux系统PWM驱动【转】
- web 对接 platform
- 基于HAProxy+Keepalived高可用负载均衡web服务的搭建