为啥有这么多的东西?

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

是什么,特点,优缺点

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. Rocket - diplomacy - wirePrefix

    https://mp.weixin.qq.com/s/DVcA2UixnB_6vgI3SjZGyQ   调试wirePrefix方法.   1. 实现   wirePrefix用于调整名称格式,其实现 ...

  2. Chisel3 - model - UserModule commands

    https://mp.weixin.qq.com/s/0ECca6XyFyEri0B4ckOZ4A   介绍UserModule类中,如何管理构建硬件模型所需的命令.   ​​   1. _comma ...

  3. SpringMVC(四)SpringMVC实现文件上传、异常拦截去、整合SSM

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.文件上传 文件上传在SpringMVC中如何实现: 准备一个文件上传的表单 导入文件上传需要的jar ...

  4. Java实现 LeetCode 1两数之和

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

  5. Java实现 蓝桥杯VIP 算法提高 3-2字符串输入输出函数

    算法提高 3-2字符串输入输出函数 时间限制:1.0s 内存限制:512.0MB 描述 编写函数GetReal和GetString,在main函数中分别调用这两个函数.在读入一个实数和一个字符串后,将 ...

  6. Java实现 洛谷 P1046 陶陶摘苹果

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ...

  7. 基于Nginx实现访问控制、连接限制

    0 前言 Nginx自带的模块支持对并发请求数进行限制, 还有对请求来源进行限制.可以用来防止DDOS攻击.阅读本文须知道nginx的配置文件结构和语法. 1. 默认配置语法 nginx.conf作为 ...

  8. webpack+vue+.vue组件模板文件 所需要的包

    {  "name": "webpack-study02",  "version": "1.0.0",  "de ...

  9. 如何监控 Linux 服务器状态?

    Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此.为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展. 本文介绍的几个命令,不仅仅适用于服务器监控, ...

  10. BitMap算法及其实现(Python)

    BitMap概述 本文介绍 BitMap 算法的应用背景,算法思想和相关实现细节. 概括而言,BitMap 主要用来解决海量数据中元素查询,去重.以及排序等问题.这里对海量数据场景的强调,似乎暗示了这 ...