3)浏览器:cookie,Session,token,jwt

370 阅读4分钟

认证 && 授权&&凭证 ?

认证(Authentication)

验证用户的身份信息,基于信息校验核对,用户登陆过程就是认证过程(如生活中的指纹打卡等,)常见认证方式有

  • 用户密码校验
  • 邮箱发送登陆链接
  • 手机号接收验证码

授权(Authorization)

用户授予第三方应用访问改用户某些资源的权限(如微信小程序询问授权,安装应用时询问是否授予权限)常见方式有

  • cookie,session,token,OAuth

凭证(Credentials)

一种媒介来标识访问者的身份,身份标识

  • 如在互联网应用中,一般网站或者应用,会有两种模式,游客模式,和登陆模式。对于不同的模式,所开放的功能有限制。

cookie

服务器委托浏览器存储的一些数据,它让服务器有了记忆能力,会再浏览器下次请求时携带并发送到服务器上

特点

  • 存储在客户端
  • 不可以跨域
  • 存储容量4kb
  • 数据格式:字符串

属性

  • name=value:键值对格式
  • domain:指定cookie所属的域名,默认是当前域名
  • path:指定cookie在哪一个路径下生效,默认是'/'
  • maxAge: cookie失效时间,-1 表示临时cookie,关闭浏览器立即失效,0 表示删除cookie
  • expires:过期时间,时间戳,尼格林治时间
  • HttpOnly: Cookie只能通过浏览器Http协议传输,禁止其它方式访问,比如JS访问Cookie,减少XSS攻击
  • SameSite:可以防范XSRF(跨站请求伪造)攻击,可以设置Strict严格限定不能随着跳转链接跨站发送,设置Lax则略宽松一点允许get/Head方法携带,post方式禁止
  • Secure: 只允许https协议加密传输

Session

记录客户端和服务端会话状态的机制,是基于cookie实现的,session存储在服务端,sessionId会存储到客户端的cookie中 image.png

Session认证特点

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的Session
  • 请求返回时将Session的唯一标识信息SessionId返回给浏览器
  • 浏览器将此信息存到cookie中
  • 第二次访问携带上sessionId

[注]:SessionId是cookie和Session的一道桥梁

token

什么是token?

1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

和Session的优势比较

  • Session:每一次用户经过应用认证之后,应用都要在服务端做一次记录,以方便用户下一次请求鉴别.存储内存开销大
  • 扩展性:认证记录保存在内存,意味用户下次请求还要必须要请求在这台服务器上。

token的组成

uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

token流程

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
  4. 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据

【注】:在每一次请求都需要携带token,需要把token放在Http的Header里,token完全由应用管理避开了同源策略

链接:juejin.cn/post/684490… 链接:www.jianshu.com/p/24825a268…