Cookie,Session,Token,JWT
几个概念?
- 什么是认证?
- 认证用户身份
- 人脸识别登录
- 账号密码登录
- 验证码登录
- 认证用户身份
- 什么是授权?
- 用户授予第三方应用访问某些资源和权限
- 比如:登录app会弹出询问是否允许app获取相关权限(访问相册,地理位置)
- 实现授权的方式有:cookie,session,token,OAuth
- 用户授予第三方应用访问某些资源和权限
- 什么是凭证?
- 实现认证授权的前提,一种证书,用于验证身份的媒介
- 可以认为是你的身份证
- 证明你学历的毕业证和学位证
- 实现认证授权的前提,一种证书,用于验证身份的媒介
cookie
- 什么是cookie?
- cookie是保存在客户端的纯文本文件,如txt,也可以说是一门客户端缓存技术,用于保存客户端请求信息
- cookie的作用
- 存储会话信息,跟踪会话状态,联系浏览器和服务器
- cookie的优点
- 存储会话信息可以用于跟踪会话状态
- 保存在浏览器,数据小,不会对服务器造成压力,提升了访问速度
- 可以长时间持续,也可以短时间持续(基于过期时间的设置)cookie可长可短,session一般较短
session
- 什么是session
- session是一门服务端会话缓存技术,,用于存储一次性会话的多次请求的数据
- session的作用
- 存储会话信息供浏览器后续请求使用可以获取并修改变量的值,和cookie一起使用识别同一个客户
- session的优点
- 相比于JWT,最大的优势是可以主动清除session
- session保存在服务端相安全
- 结合cookie使用,较为灵活兼容性好
cookie和session的相同点和不同点
相同点
- 都可以保存用户信息
- session的使用要求浏览器支持cookie如果浏览器不支持或禁止使用cookie,则session不能使用
- 用户访问时,服务器创建或查找session生成session并传给浏览器,浏览器将其保存在cookie中一并放入内存,也可以认为cookie是session在浏览器的标识
不同点
- 安全性:session比cookie安全,session存储在服务端,cookie存储在客户端
- 存取值的类型不同:cookie支持字符串类型,如果要设置其他类型需要将其转换成字符串,session可以存储任意类型
- 有效期不同:cookie可以设置长时间保持,比如我们经常使用的默认登录功能session一般失效时间短客户端关闭(默认情况下)或session超时都会失效
- 存储大小不同,单个cookie保存的数据不能超过4K,session可存储数据远高于cookie,但访问量过多会占用服务器资源
- 保存状态的方案不同:cookie是在客户端保存,session是在服务端保存
Token
- 什么是token?
- token是服务端生成的一串字符串,一座客户端进行请求的令牌,访问资源接口(API)时所需要的资源凭证(身份证),当第一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只要带上这个token前来请求数据即可,无需再次带上用户名和密码
- token的作用?
- 用来做身份验证
- 节省服务器内存
- 数据签名防伪造攻击
token的优点
-
服务端无状态化、可扩展性好
- 在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。如果我们将已验证的用户的信息保存在Session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时,可能会造成 一些拥堵。但是不要着急。使用tokens之后这些问题都迎刃而解,因为tokens自己hold住了用户的验证信息。
-
支持移动端设备
- Tokens能够创建与其它程序共享权限的程序。当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理)
这时采用Token认证机制就会简单得多。
- Tokens能够创建与其它程序共享权限的程序。当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理)
-
安全
- 请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。
-
支持跨域访问
- 我们提前先来谈论一下CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。而Cookie是不允许垮域访问的(垮域访问:两个域名之间不能跨过域名来发送请求或者请求数据)
-
性能
- 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
(内存型的session另说)
- 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
-
解耦
- 不需要绑定到一个特定的身份验证方案。
Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.
- 不需要绑定到一个特定的身份验证方案。
- 什么是JWT?
- json web token,它定义了一种紧凑且自包含的方式,以JSON对象的方式在各方之间安全地传输信息,因为是基于数字签名所以可以进行验证和信任,常用的算法比如有HMAC、RSA等等。
对比token和JWT
- 相同点
- 都是访问资源的令牌
- 都可以记录用户信息
- 都是使服务端无状态话
- 都是只有验证成功后,客户端才能访问服务端上受保护的资源
- 不同点
- 服务端验证客户端发来的token信息要进行数据的查询操作;
- JWT验证客户端发来的token信息就不用, 在服务端使用密钥校验就可以(校验也是 JWT 自己实现的),不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!