关于Token和Cookie做权限校验的区别及Token自动续期方案
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自动续期方案的更多相关文章
- vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title
1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...
- IdentityServer4实现Token认证登录以及权限控制
相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- Token ,Cookie和Session的区别
在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...
- Token认证登录以及权限控制
IdentityServer4实现Token认证登录以及权限控制 相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的: ...
- fastDFS shiro权限校验 redis FreeMark页面静态化
FastDFS是一个轻量级分布式文件系统, 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...
- Token ,Cookie和Session的区别--学习笔记
http://blog.csdn.net/tobetheender/article/details/52485948 Token token的意思是“令牌”,是用户身份的验证方式,最简单的token组 ...
- Token ,Cookie、Session傻傻分不清楚?
作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html 在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对to ...
- Token 、Cookie和Session的区别
本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...
- drf 权限校验设置与源码分析
权限校验 权限校验和认证校验必须同时使用,并且权限校验是排在认证校验之后的,这在源码中可以查找到其执行顺序. 权限校验也很重要,认证校验可以确保一个用户登录之后才能对接口做操作,而权限校验可以依据这个 ...
随机推荐
- Docker | redis集群部署实战
前面已经简单熟悉过redis的下载安装使用,今天接着部署redis集群(cluster),简单体会一下redis集群的高可用特性. 环境准备 Redis是C语言开发,安装Redis需要先将Redis的 ...
- Python学习三天计划-1
一.第一个Python程序 配置好环境变量后 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python解释器的作用是 将Python代码翻译成计算机认识 ...
- Windows活动目录_初识
计算机组织形式 工作组(用户本地登录时构造SID进行权限分配): 域(统一身份验证与管理) 域注意事项 实体:域控.域用户.加入域的机子. 依赖的服务:netlogon服务 强制刷新组策略gpupda ...
- 记录一次使用git工具拉取coding上代码密码账号错误的经历
1.忘记密码 1.另外的一个位置
- PageRank原理分析
pagerank是将众多网页看成一个有向图,每个页面就是有向图中的节点.计算每个节点的出度和入度.如果一个网站被大量其他的网页引用,那么他就会有更高的pr分数. 原理 对于所有与节点i相连的节点,用他 ...
- Unity坐标系入门
一.坐标系的概念 Unity 世界坐标系采用左手坐标系,大拇指指向X轴(红色),食指指向Y轴(黄色),中指向手心方向歪曲90度表示Z轴(蓝色),同时Z轴也是物体前进方向,下图表示Unity的四种坐标系 ...
- 使用@Transactional注解的方法所在的类获取不到注解的解决方案
前段时间遇到一个问题,一个service叫做A吧,有多个实现类分别是B,C,D,需要根据前端传的不同参数去匹配不同的实现类,我就自定义了一个注解@OrderDeal放在B,C,D上面,然后匹配前端传的 ...
- Terminal(oh-my-zsh) 美化
如果你使用Mac进行开发,那么Terminal.app应该是你使用非常频繁的app了.初体验Terminal时你可能觉得单调乏味,阅读密密麻麻的内容也很费劲.但是如果你跟着我一起配置它,就会发现你平时 ...
- Java自定义排序
实现Comparator接口 实现该接口需要重写compare()方法 Arrays.sort(students, new Comparator<Student>() { @Overrid ...
- cookie中 防止重复存值 (可用于历史记录等)
function makeCookie($key,$val){ // 查看cookie中是否已经存过键为history_ids if(Cookie::has($key)){ // 已经存过了 $jso ...