为啥有这么多的东西?

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

是什么,特点,优缺点

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下传输。可以看出随着互联网发展,对于授权鉴权的要求也不一样。因此才会产生众多的机制。每一种机制不是比上个机制绝对的好,都是有特定的使用环境的。

cookie,session,jwt,token,oauth2联系和区别的更多相关文章

  1. 存储机制 cookie session jwt token

    cookieCookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网 ...

  2. cookie,session和token的概念以及区别

    cookie: 采用客户端保存状态的方案: cookie的组成:名字,值过去时间,路径以及域: 没有设置时间:随着浏览器的打开和关闭决定: 设置了时间:浏览器就会把cookie保存在硬盘上,根据时间来 ...

  3. Cookie Session 与Token

    由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...

  4. Cookie.Session到Token和JWT

    一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...

  5. Blazor和Vue对比学习(进阶2.2.4):状态管理之持久化保存(2),Cookie/Session/jwt

    注:本节涉及到前后端,这个系列的对比学习,还是专注在前端Vue和Blazor技术,所以就不撸码了,下面主要学习概念. 我们知道,Http是无状态协议,客户端请求服务端,认证一次后,如果再次请求,又要重 ...

  6. 傻傻分不清之 Cookie、Session、Token、JWT

    傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...

  7. 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚

    还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...

  8. Cookie、Session、Token那点事儿和前后端分离之JWT用户认证

    (两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...

  9. 授权认证登录之 Cookie、Session、Token、JWT 详解

    一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...

  10. Cookie、Session、Token、JWT

    什么是认证(Authentication)------->就是验证当前用户的身份,证明"你是你自己" 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只 ...

随机推荐

  1. 对于使用progisp软件进行ISP编程时进入不了编程模式的解决方法

    标题: 对于使用progisp软件进行ISP编程时无法进入编程模式的解决方法 作者: 梦幻之心星 347369787@QQ.com 标签: [progisp, 软件] 目录: 软件 日期: 2019- ...

  2. 【Java8新特性】不了解Optional类,简历上别说你懂Java8!!

    写在前面 最近,很多读者出去面试都在Java8上栽了跟头,事后自己分析,确实对Java8的新特性一知半解.然而,却在简历显眼的技能部分写着:熟练掌握Java8的各种新特性,能够迅速使用Java8开发高 ...

  3. angularjs 路由切换回到顶部

    angularjs路由切换  页面不会回到顶部 问题: 在angularjs中  ui-sref或者$state.go(),通过路由切换页面,发现新打开的路由页面仍然停留在上一次的路由页面访问的位置. ...

  4. MongoDB学习(一) 安装与基本使用

    链接:https://pan.baidu.com/s/1ogTDFJg3ZZc0CyzaTeswWg 提取码:2k0p 安装 // 将压缩包解压到指定目录 [bigdata@linux backup] ...

  5. 如何短时间内快速通过Java面试

    当然是刷题啊 1-10期[10期]Redis 面试常见问答[09期]说说hashCode() 和 equals() 之间的关系?[08期]说说Object类下面有几种方法呢?[07期]Redis中是如 ...

  6. Java实现 LeetCode 728 自除数(暴力)

    728. 自除数 自除数 是指可以被它包含的每一位数除尽的数. 例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0. 还有,自除数不允许包含 ...

  7. Java实现合并排序

    1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...

  8. 2.3 sqlmap目录及结构

    2.3 sqlmap目录及结构Tips:此篇文章主要参考了<sqlmap从入门到精通>这本书中的相关具体细节,由于这本书作者完成的时间大概在2017年作用,所以我根据书中提到的信息再根据目 ...

  9. 本地配置gitee

    一 下载工具 Git-2.62.0-64-bit.exe 以上工具版本号不需要一样,安装完前两个后重新启动系统,再安装第3个. 二 码云网站注册 https://gitee.com/ 使用邮箱注册 注 ...

  10. vue无法选择上传相同文件

    使用h5自带的input type=file时,使用change触发上传事件 <input class="exportss" type="file" id ...