为啥有这么多的东西?

由于互联网在刚开始设计的时候是展现静态网页为主,没有现在这么多的交互和互动,所以被设计为了无状态,随用随走的简单模式。随着互联网的发展,各种具有和用户交互功能的网站出现,要求用户每次访问一个页面就输入用户名密码是不现实的,因此需要服务器能够识别并跟踪用户,这也就产生了一系列的鉴权授权机制。

是什么,特点,优缺点

cookie

cookie是保存在用户浏览器的一段小文本,他可以用来标识用户身份。用户登录成功后将可以标识用户的字段设置到cookie中返回给客户端,客户端收到cookie后该用户以后每次请求都会携带上该cookie,从而方便服务器标识用户返回对应的内容。

优点

  1. 通过cookie可以让服务器以较小成本去追踪用户会话。
  2. cookie只会发往设置该cookie的域名,这保证了cookie的相对安全。
  3. 由于cookie没有遵循严格的同源策略,所以一个子域可以设置或获取父域的cookie,这种特性十分有利于实现单点登录。
  4. 可以设置cookie过期时间,从而保证cookie在有效期内使用。

缺点

  1. cookie大小只有4k,因此不能保存大量内容。
  2. cookie保存在客户端,因此不够安全,如果有人劫持了cookie,服务器无法区分出来是用户本人还是hacker在使用会话状态。
  3. 服务器端如果没有设置禁止js读取cookie的话,js是可以创建修改删除该域名下的cookie的,因此为了防止xss攻击,需要将cookie设置为HttpOnly。
  4. 如果浏览器设置了禁用cookie,则服务器无法根据cookie追踪用户会话

session

session是存储在服务器,用来跟踪用户会话的一种机制。他经常同cookie一起使用。用户发起请求后,服务器会针对该请求创建一个session并可以设置相关属性,然后服务器将sessionid放入cookie中返回给浏览器。浏览器以后请求都带上这个cookie,服务器通过sessionid就可以拿到相应的session并知道这是哪个用户的会话了。

优点

  1. 将用户信息保存在服务器,安全性较好
  2. 即使用户禁用cookie,仍然可以用拼接在url后边的方式来传递sessionid
  3. 可以设置失效时间,有续约机制可以让会话时间更长
  4. 使用session可以使页面间传参更加方便

缺点

  1. 会加剧服务器存储负担,如果将session放到内存中,则大用户量的情况下对内存也是一个挑战
  2. 如果是分布式服务器,不能很好的同步session信息

jwt

浏览器请求验证通过后将和用户相关的信息存到token中并加以签名,下次浏览器请求时候带上token,服务器端通过验证后来标识用户会话状态。

优点

  1. 解决了session的痛点:服务器端保存session带来的存储负担和分布式环境下无法将session很好的同步。
  2. 采用了加密和签名防止被篡改。
  3. 不需要cookie,对移动端友好。

缺点

  1. 不能及时销毁无效或者危险token,只能通过加黑名单的方式过滤,增加了服务器负担。
  2. 由于token的无法收回的机制,不建议将token过期时间设置太长,可以通过配置两个token的机制来克服token的过期时间短的问题。
  3. 数据不够安全,如果被窃取,那在payload中的数据是有泄露的风险的,看似不可读是因为base64编码的缘故。

oauth2

这是一种授权鉴权的理念,他可以让你通过第三方应用来登录你的网站。实质上相当于第三方网站给你的网站颁发了一个token,通过这个token,你的网站就可以去请求三方网站有限制的一些内容。使用oauth2授权登录最大的好处就是方便,可以让不同网站的数据以更加方便的方式进行共享。

流程

客户应用向授权服务器请求Sccess Token ---> 授权服务器向用户征询意见,是否将权限授予客户应用 ---> 用户同意 ---> 授权服务器生成颁发Access Token给客户应用 ---> 客户应用请求资源服务器 ---> 资源服务器验证客户应用的Access Token ---> 验证通过,返回数据.

联系

这几种方式本质上都是一种授权鉴权的机制。为了确保网络传输的安全,建议设置成仅在https下传输。可以看出随着互联网发展,对于授权鉴权的要求也不一样。因此才会产生众多的机制。每一种机制不是比上个机制绝对的好,都是有特定的使用环境的。

最新文章

  1. Alpha版总结会议
  2. configparser配置文件操作
  3. Http请求之--C#的HttpWebRequest实现POST方式请求
  4. 关于wcf异常异常信息:由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribut
  5. [原创]java WEB学习笔记56:Struts2学习之路---Struts 版本的 登录 demo
  6. Topcoder srm 632 div2
  7. android 中设置HttpURLConnection 超时并判断是否超时
  8. Android(java)学习笔记131:Intent启动别的Activity
  9. 基于C#的SolidWorks插件开发(2)--创建插件
  10. php mysql PDO使用
  11. C# 保存窗口为图片(保存纵断面图)
  12. C语言对象化编程
  13. 携程Java工程师——一道面向对象面试选择题(转)
  14. Iphone安装铃声
  15. mybatis基础学习2---(resultType和resultMap的用法和区别)和setting的用法
  16. RabbitMQ分布式消息队列服务器(一、Windows下安装和部署)
  17. 小白的Python之路 day5 configparser模块的特点和用法
  18. 1.Java关键字和保留字
  19. Object.prototype.toString.call(obj)使用方法以及原理
  20. 【vue】vue +element 搭建项目,vuex中的store使用

热门文章

  1. 加速国内Github代码下载速度
  2. STM32读取bq33100数据——硬件IIC
  3. 05 . Python入门值循环语句
  4. 50个SQL语句(MySQL版) 问题一
  5. 关于react中antd design pro下面src/models
  6. conda虚拟环境安装
  7. jchdl - GSL实例 - Mul(无符号数的乘法)
  8. 一个request请求然后锁定等待异步接口处理结果
  9. footer部分,当页面主题内容不满一屏时,始终位于页面底部
  10. Java实现第十届蓝桥杯组队