为啥有这么多的东西?

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

是什么,特点,优缺点

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. Docker 笔记一相关命令

    Centos 7 : Service network restart 重启网络 Ip addr 查看ip地址 Uname -r 查看内核版本 Yum install docker 安装docker 命 ...

  2. Vue拖拽交换数据(非插件)

    HelloWorld.vue 文件 <template> <div class="hello"> <h1>{{ msg }}</h1> ...

  3. Linux (三) 基础命令 上

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一 . 背景知识 1. Linux系统中一切皆文件 在Linux系统中任何东西都是以文件形式来存储的.这 ...

  4. Java实现 LeetCode 599 两个列表的最小索引总和(使用hash提高效率)

    599. 两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅 ...

  5. Java实现 LeetCode 528 按权重随机选择(TreeMap)

    528. 按权重随机选择 给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比. 说明 ...

  6. Java实现 蓝桥杯VIP 基础练习 龟兔赛跑预测

    题目描述 话说这个世界上有各种各样的兔子和乌龟,但是 研究发现,所有的兔子和乌龟都有一个共同的特点--喜欢赛跑.于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 ...

  7. Java实现 LeetCode 74 搜索二维矩阵

    74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: ...

  8. Android中如何使用列表对话框

    给按钮绑定,并且设置Click事件 bt3=findViewById(R.id.btn3); bt3.setOnClickListener(new View.OnClickListener() { @ ...

  9. java实现 蓝桥杯 算法训练 安慰奶牛

    问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路, ...

  10. python3 修改计算机名称GUI程序

    from tkinter import *from tkinter import messageboximport tkinterimport winregimport osdef serch(): ...