cookie,session,jwt,token,oauth2联系和区别
为啥有这么多的东西?
由于互联网在刚开始设计的时候是展现静态网页为主,没有现在这么多的交互和互动,所以被设计为了无状态,随用随走的简单模式。随着互联网的发展,各种具有和用户交互功能的网站出现,要求用户每次访问一个页面就输入用户名密码是不现实的,因此需要服务器能够识别并跟踪用户,这也就产生了一系列的鉴权授权机制。
是什么,特点,优缺点
cookie
cookie是保存在用户浏览器的一段小文本,他可以用来标识用户身份。用户登录成功后将可以标识用户的字段设置到cookie中返回给客户端,客户端收到cookie后该用户以后每次请求都会携带上该cookie,从而方便服务器标识用户返回对应的内容。
优点
- 通过cookie可以让服务器以较小成本去追踪用户会话。
- cookie只会发往设置该cookie的域名,这保证了cookie的相对安全。
- 由于cookie没有遵循严格的同源策略,所以一个子域可以设置或获取父域的cookie,这种特性十分有利于实现单点登录。
- 可以设置cookie过期时间,从而保证cookie在有效期内使用。
缺点
- cookie大小只有4k,因此不能保存大量内容。
- cookie保存在客户端,因此不够安全,如果有人劫持了cookie,服务器无法区分出来是用户本人还是hacker在使用会话状态。
- 服务器端如果没有设置禁止js读取cookie的话,js是可以创建修改删除该域名下的cookie的,因此为了防止xss攻击,需要将cookie设置为HttpOnly。
- 如果浏览器设置了禁用cookie,则服务器无法根据cookie追踪用户会话
session
session是存储在服务器,用来跟踪用户会话的一种机制。他经常同cookie一起使用。用户发起请求后,服务器会针对该请求创建一个session并可以设置相关属性,然后服务器将sessionid放入cookie中返回给浏览器。浏览器以后请求都带上这个cookie,服务器通过sessionid就可以拿到相应的session并知道这是哪个用户的会话了。
优点
- 将用户信息保存在服务器,安全性较好
- 即使用户禁用cookie,仍然可以用拼接在url后边的方式来传递sessionid
- 可以设置失效时间,有续约机制可以让会话时间更长
- 使用session可以使页面间传参更加方便
缺点
- 会加剧服务器存储负担,如果将session放到内存中,则大用户量的情况下对内存也是一个挑战
- 如果是分布式服务器,不能很好的同步session信息
jwt
浏览器请求验证通过后将和用户相关的信息存到token中并加以签名,下次浏览器请求时候带上token,服务器端通过验证后来标识用户会话状态。
优点
- 解决了session的痛点:服务器端保存session带来的存储负担和分布式环境下无法将session很好的同步。
- 采用了加密和签名防止被篡改。
- 不需要cookie,对移动端友好。
缺点
- 不能及时销毁无效或者危险token,只能通过加黑名单的方式过滤,增加了服务器负担。
- 由于token的无法收回的机制,不建议将token过期时间设置太长,可以通过配置两个token的机制来克服token的过期时间短的问题。
- 数据不够安全,如果被窃取,那在payload中的数据是有泄露的风险的,看似不可读是因为base64编码的缘故。
oauth2
这是一种授权鉴权的理念,他可以让你通过第三方应用来登录你的网站。实质上相当于第三方网站给你的网站颁发了一个token,通过这个token,你的网站就可以去请求三方网站有限制的一些内容。使用oauth2授权登录最大的好处就是方便,可以让不同网站的数据以更加方便的方式进行共享。
流程
客户应用向授权服务器请求Sccess Token ---> 授权服务器向用户征询意见,是否将权限授予客户应用 ---> 用户同意 ---> 授权服务器生成颁发Access Token给客户应用 ---> 客户应用请求资源服务器 ---> 资源服务器验证客户应用的Access Token ---> 验证通过,返回数据.
联系
这几种方式本质上都是一种授权鉴权的机制。为了确保网络传输的安全,建议设置成仅在https下传输。可以看出随着互联网发展,对于授权鉴权的要求也不一样。因此才会产生众多的机制。每一种机制不是比上个机制绝对的好,都是有特定的使用环境的。
cookie,session,jwt,token,oauth2联系和区别的更多相关文章
- 存储机制 cookie session jwt token
cookieCookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网 ...
- cookie,session和token的概念以及区别
cookie: 采用客户端保存状态的方案: cookie的组成:名字,值过去时间,路径以及域: 没有设置时间:随着浏览器的打开和关闭决定: 设置了时间:浏览器就会把cookie保存在硬盘上,根据时间来 ...
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
- Cookie.Session到Token和JWT
一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...
- Blazor和Vue对比学习(进阶2.2.4):状态管理之持久化保存(2),Cookie/Session/jwt
注:本节涉及到前后端,这个系列的对比学习,还是专注在前端Vue和Blazor技术,所以就不撸码了,下面主要学习概念. 我们知道,Http是无状态协议,客户端请求服务端,认证一次后,如果再次请求,又要重 ...
- 傻傻分不清之 Cookie、Session、Token、JWT
傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...
- 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚
还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- 授权认证登录之 Cookie、Session、Token、JWT 详解
一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...
- Cookie、Session、Token、JWT
什么是认证(Authentication)------->就是验证当前用户的身份,证明"你是你自己" 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只 ...
随机推荐
- 题解 P5329 【[SNOI2019]字符串】
用栈的做法来水一发. 首先我们有一个暴力的做法,枚举每个被删除的字符,然后排序输出,时间复杂度:$ O ( N \times N \times LogN ) $ . 然后我们观察一下数据,发现有一个数 ...
- Maven+JSP+SSM+Mysql实现的音乐网站
项目简介 项目来源于:https://gitee.com/coder_ze/iMusic 本系统基于Maven+JSP+SSM+Mysql实现的音乐网站.主要实现的功能有音乐播放.下载.上传等几个模块 ...
- Spring (一 ) 概述与介绍
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 目录 1.Spring概述 2.Spring的模块介绍 Spring框架分为四大模块: 3.Eclips ...
- golang内存逃逸
golang程序变量会携带油一组校验数据,用来证明它的整个生命周期是否在运行时完全可知.如果变量通过了这些校验,它就可以在栈上分配.否则就说它逃逸了,必须在堆上分配 能引起变量逃逸到堆上的典型 ...
- Java实现 LeetCode 552 学生出勤记录 II(数学转换?还是动态规划?)
552. 学生出勤记录 II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的 ...
- C#Winform中resx文件无效 找不到路径
问题由来 笔者因为更改了添加的图片的路径,再把路径改成图片所在的路径还是报resx文件无效,未能找到路径 问题原因 其实这个问题是因为对对象的引用修改了,但是resx文件中的应用还是没有修改.因为re ...
- java实现第一个数字
/* 以下的静态方法实现了:把串 s 中第一个出现的数字的值返回. 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回 2 s = "82445ad ...
- 信道估计(channel estimation)图解——从SISO到MIMO原理介绍
1. 引言 在所有通信中,信号都会通过一个介质(称为信道),并且信号会失真,或者在信号通过信道时会向信号中添加各种噪声.正确解码接收到的信号而没有太多错误的方法是从接收到的信号中消除信道施加的失真和噪 ...
- C# 反射详解一
首先反射是基于System.Reflection命名空间下,.Net框架提供的帮助类库,可以读取并使用metadata(元数据:描述对象信息的数据). 我们再来看下代码生成编译的总过程. 编译器编译( ...
- iOS-UIViewController创建的几种方法和UIWindow的介绍
在上一篇笔记中<iOS-程序启动原理和UIApplication>,http://blog.csdn.net/yang198907/article/details/49735531 在程序 ...