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,而服务端只通过运算来验证用户;

最新文章

  1. Web开发安全之文件上传安全
  2. js数组与对象性能比较
  3. Visual Studio 2015无法进行Package Restore的原因和解决方案
  4. Linux 常用命令小结
  5. 细心看完这篇文章,刷新对Javascript Prototype的理解
  6. 喜讯!Ubuntu 16.10(Yakkety Yak) Final Beta发布喽!!!
  7. 不能使用weak修饰进行声明的类
  8. Emacs 配置 Python 编程环境
  9. MySQL的联结(Join)语法
  10. HDU 3362 Fix
  11. mysql 查看表的类型(转)
  12. 【PYTHON】三级菜单
  13. Python 正则表达式 flags 参数
  14. BZOJ4356Ceoi2014 Wall——堆优化dijkstra+最短路树
  15. vue-router拦截
  16. https 对 json空对象解析的影响
  17. kafka8 编写简单消费者
  18. Linux系统PWM驱动【转】
  19. web 对接 platform
  20. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

热门文章

  1. XenForo论坛安装
  2. win10 打开剪切板失败 拒绝访问 已解决!!
  3. Word运行 没有注册类
  4. Linux命令-df
  5. 【GNU/Linux, Debian】使用cups连接HP Laserjet 1012 HB打印机
  6. SOAMANAGER 500 ERROR
  7. perf 编译失败
  8. ThinkPHP获取当前url
  9. 【笔记】archlinux缺少部分常用工具
  10. ADT 更新遇到的一个BUG解决方案【转】