title: 关于Token和Cookie做权限校验的区别及Token自动续期方案
categories: 后端
tags:
- .NET

Token和Cookie的区别

首先,要知道一些基本概念:http是无状态的,session是存储在服务端的数据,每次用户在发起http请求到服务器时会在cookie中带上一个session id,服务端通过这个session id来判断用户是哪一个,cookie就是在浏览器端存储数据的一种方式,可以在服务器端通过在header中通过添加set-cookie来通知浏览器端添加cookie

Token和Cookie的对比

  • Token可以在http请求的任何地方加上,比如header、body、url,而cookie存储的地方是固定的
  • Token可以在需要验证的接口才加上token,而cookie则会在每次请求都会自动加上
  • Cookie会存在跨域问题,如果Cookie是在aaa.example上创建的,那么在bbb.example下也是不允许访问的,而Token不存在这个问题,只要在请求内带上token就可
  • Token天生就可以避免CSRF伪造站点攻击(毕竟发起请求是否携带Token全靠自己写逻辑),而Cookie默认是自动携带的,因此在不注意的情况下很容易遭受攻击

在 CSRF 攻击中,恶意网站利用浏览器会自动将身份验证 cookie 附加到对该域的请求的事实,并诱使您的浏览器执行请求

关于这方面,Cookie也是有办法解决CSRF攻击的,可以阅读这篇文章了解:https://www.invicti.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/

综上所述,使用Token明显灵活性更强,不过使用Token的话还存在一个问题就是Token如何做自动续期,

Token续期方案

方案一:axios拦截器

本方法的思路是在axios的响应拦截器内判断服务端返回的错误结果,如果是token过期(比如http code是401或多少),那么调用刷新token的函数,在刷新token成功后再次发起请求,伪代码大概是这样的:

async function refreshToken(){
const data=await axios.get('http://xxx.xxx.xxx/api/refreshToken?oldToken='+oldToken);
localStorage.AddItem("Token","Bearer "+data.newToken);
} request.interceptors.response.use(resp => {
return resp;
},async err=>{
if(err.reponse.status==401)
{
await refreshToken(); err.config.headers.Authorization = localStorage.GetItem("Token");
return request(err.config);// 发起新请求 请求的参数还是原来的url和数据
}
});

最好加个RefreshToken,普通的Token过期时间短,RefreshToken过期时间长,用RefreshToken获取新的Token,减少Token暴露的风险

方案二:定时器

async function refreshToken(){
const data=await axios.get('http://xxx.xxx.xxx/api/refreshToken?oldToken='+oldToken);
localStorage.RemoveItem("Token");
localStorage.AddItem("Token","Bearer "+data.newToken);
} this.setInterval(refreshToken,1000*60*25);// 25分钟调用一次

把上面的内容放在一个js文件内,在App.vue中引入这个js文件,如果token是30分钟过期,可以25分钟(不能比30分钟长)调用一次刷新函数去服务端获取新的token替换掉老的token

关于Token和Cookie做权限校验的区别及Token自动续期方案的更多相关文章

  1. vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title

    1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...

  2. IdentityServer4实现Token认证登录以及权限控制

    相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...

  3. SpringCloud(8)---zuul权限校验、接口限流

    zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...

  4. Token ,Cookie和Session的区别

    在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...

  5. Token认证登录以及权限控制

    IdentityServer4实现Token认证登录以及权限控制   相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的: ...

  6. fastDFS shiro权限校验 redis FreeMark页面静态化

    FastDFS是一个轻量级分布式文件系统,   使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务   FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...

  7. Token ,Cookie和Session的区别--学习笔记

    http://blog.csdn.net/tobetheender/article/details/52485948 Token token的意思是“令牌”,是用户身份的验证方式,最简单的token组 ...

  8. Token ,Cookie、Session傻傻分不清楚?

    作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html 在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对to ...

  9. Token 、Cookie和Session的区别

    本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...

  10. drf 权限校验设置与源码分析

    权限校验 权限校验和认证校验必须同时使用,并且权限校验是排在认证校验之后的,这在源码中可以查找到其执行顺序. 权限校验也很重要,认证校验可以确保一个用户登录之后才能对接口做操作,而权限校验可以依据这个 ...

随机推荐

  1. 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket failed:Invalid frame header

    element-admin-vue 项目console台一直报websocket连接失败 解决办法 1.vue.config.js中配置devServer.proxy的ws为false  (我没成功) ...

  2. 齐博x2向上滚动特效

    要实现图中圈起来的向上滚动特效,大家可以参考下面的代码 <!--滚动开始--> <style type="text/css"> .auto-roll{ he ...

  3. Selenium+Python系列(三) - 常见浏览器操作

    写在前面 上篇文章为大家分享了自动化测试中,常见元素定位的操作. 今天再次读文章,居然忘记了大家特别喜欢的CSS和Xpath定位操作分享,这怎么能行呢? 马上安利,感兴趣的同学去参考下面链接: CSS ...

  4. Docker之介绍与安装

    Docker 说明 本章,我们主要从Docker简介.Docker中几个核心概念和Docker安装这几个方面对Docker进行介绍! 1. Docker 简介 1.1. 什么是 Docker Dock ...

  5. 6.channels 配置websocket

      Django默认不支持websockey,需要Django支持的话需要安装第三方组件 django channels 是django支持websocket的一个模块.   1.安装 pip3 in ...

  6. ESP32 IDF 获取天气信息

    一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...

  7. LVS综合实验

    LVS综合实验 1.环境准备 提前准备:Mysql8.0.30安装包.Mysql安装脚本.shopxo2.3.0安装包.DNS脚本 服务器 IP地址 作用 系统版本 Mysql-master 10.0 ...

  8. element-plus 消息提示

    用来显示「成功.警告.消息.错误」类的操作 <template> <el-button :plain="true" @click="open2" ...

  9. 时序数据库TDengine 详细安装+集成流程+问题解决

    官方文档:https://docs.taosdata.com/get-started/package/ 点击进入 产品简介 TDengine 是一款高性能.分布式.支持 SQL 的时序数据库 (Dat ...

  10. java学习之spring基础

    0x00前言 spring框架应用的是ioc模式,ioc模式是指控制反转模式,本质是你不去创建对象让spring框架给你创建对象你去使用对象.多种开发模式通过配置文件和注解的方式去开发的都很值得去学习 ...