cookie,session,token,jwt
基本概念
- 认证
- 证明你是你自己,验证身份
- 授权
- 用户授予第三方访问用户的资源权限
- 小程序,应用等获取手机上的权限
- 用户授予第三方访问用户的资源权限
- 凭证
- 认证,授权,媒介
- 身份证,网站游客模式,用户模式的令牌
- 认证,授权,媒介
cookie
http无状态协议,客户端与服务器进行会话,不会保留会话信息,如果需要跟踪访问者的身份证信息,需要将会话状态进行把保存,通过维护cookie或者session来做到。
cookie是服务端发送至浏览器上存在浏览器内的一小块数据,在下一次发送时会携带。
cookie不可跨域,但在一级域名和二级域名之间允许相互使用。domain属性。
cookie属性,键值对来存储内容,domain域名,哪个路径下生效用path,maxAge失效时间,expires过期时间,secure,加密传输(如果true,在https下才有效).httpOnly,无法通过JS脚本读取Cookie信息,还是能过通过Application中手动修改信息,一定程度上防止xss攻击
session
另一种记录客户端和服务器会话状态的一种机制。
session基于cookie实现,session是存储在服务器端,sessionid是存储到客户端的cookie中。
- 流程
- 第一次请求服务器,服务器根据提交的信息创建Session
- 请求返回将Session的唯一标识SessionId返回给浏览器
- 浏览器接收到SessionId信息后,会将该信息存入Cookie中,同时记录Cookie此SessionID属于哪个域名
- 第二次请求服务器时,查看该域名下是否存在Cookie,存在Cookie自动也将其信息发送给服务器,服务器从Cookie中找到SessionID,再根据SessionId查找对应的Session信息,如果没有就是没有登陆或者登陆失效,如果找到就可以继续操作。
区别:
- 大小cookie4kb,session最多一个浏览器一般是20个,默认不超过1024kb
- 安全性,存在客户端 一个存在服务端
- 存储类型,cookie时字符串,Session可以时任意类型
- 有效期,Cookie可以时长时间保存,Session在浏览器清除cookie或者Session超时的情况下都会失效。
Token
访问资源接口API所需要的资源凭证
简单组成:uid用户唯一身份标识,time当前时间戳,sign签名,token前几位哈希算法压缩成的十六进制字符串
- 过程:
- 客户端使用用户名,密码登陆
- 服务器验证请求,验证是否成功,将用户信息生成token返回给客户端
- 客户端接收到token将其存在本地的cookie或者localstorage中
- 客户端在每一次请求时,都将token携带
- 服务器接收到请求,验证客户端携带的token,如果成功就向客户端返回请求的数据
- 服务端不需要存token通过解析token的时间来换取session 的存储空间,减轻服务器压力
Refresh Token
- 通过RefreshToken来更新AccessToken,通常RefreshToken的时间长于AccessToken,当AccessToken失效以后,通过RefreshToken来重新获取新的Token,如果RefreshToken也失效了,用户只能重新登陆
区别:
- session服务端状态化,记录会话信息,token令牌,服务端无状态话,不会存储会话信息。
- token更安全,有签名,防止监听以及重放攻击,Session以来链路层保证安全
JWT
跨端认证解决方案
授权认证机制
过程:
- 用户输入用户名密码登陆认证成功,返回一个JWT
- token保存本地
- 用户需要在请求头Authorization中使用Bearer添加JWT
JWT不使用Cookie,不存在跨域问题,用户状态不再存储在服务器内容中是无认证机制。JWT是自包含,减少了查询数据库的需要。
区别:
- token需要查询验证用户信息,JWT是Token和Payload加密存储在客户端中,服务器只需要通过密钥解密验证,校验也是JWT自己实现的,不需要查询或者减少查询数据库
引用参考:https://juejin.cn/post/6844904034181070861#heading-22