前端登录状态验证Session和Token的区别

文章介绍了Session和Token两种认证方式。Session依赖服务器存储状态,易受负载均衡影响,可能遭遇XSS攻击,而Token则通过加密避免了这些风险,支持无状态验证。Token中的JWT结构包括头部、负载和签名,提供了额外的安全保障。
摘要由CSDN通过智能技术生成

(1)Session

客户端发送一个登录请求,服务器验证登录数据无误,会生成一个sessionID,此ID对应的值即登录状态为已登录。服务器有一个key-value映射表,会把这个ID和登录状态存到此表中。

服务器返回的响应头的set-Cookie,会使得客户端收到后自动把sessionID保存到cookie中,登录以后的每次请求的请求头都会自动带上这个cookie。

缺点

  • A 服务器存储了 Session,就是做了负载均衡后,假如一段时间内 A 的访问量激增,会转发到 B 进行访问,但是 B 服务器并没有存储 A 的 Session,会导致 Session 的失效。所以每个服务器的状态表必须同步,或者抽离出来统一管理,如使用Redis等服务。

  • 浏览器禁用cookie后只能采用其他方案发SessionID(如URL重写)。

  • XSS攻击:跨站脚本攻击。坏蛋在某网站的可编辑部分注入脚本,脚本发送信息到坏蛋的服务器后台,坏蛋收集到网站的用户信息/cookie。

  • CSRF攻击:跨域攻击。

(2)Token

客户端发送一个登录请求,服务器验证登录数据无误,会根据登录数据生成一个Token发送给客户端,服务器不再需要维护状态表。

登陆以后的每次请求都带上这个Token,服务器再解密验证是否合法即可。由于是加密的数据,即使用户可以修改,命中几率也很小。客户端不再使用cookie存储,也有效避免了CSRF攻击。

Token的结构:头部,负载和签名。

  1. 头部存储Token的类型和签名算法(如:类型是JWT,加密算法是HS256)

{
  "alg": "HS256",
  "typ": "JWT"
}

Json 块被 Base64Url 编码形成 JWT 的第一部分。

  1. 负载是Token要存储的信息(如:用户姓名和昵称信息)

{
  "name": "John Doe",
  "alias": "john"
}

Json 块被Base64Url 编码形成 JWT 的第二部分。

  1. 签名是由指定的算法,将转义后的头部和负载,加上密钥一同加密得到的。

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

签名用于验证消息在此过程中没有更改,并且对于使用私钥进行签名的令牌,它还可以验证 JWT 的发送者的真实身份。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值