golang前后端jwt对接
0x0 什么是jwt
JWT是JSON Web Token的缩写,可以用作授权认证。传统的授权认证一般采用session,由于session存储在服务端,加大了服务端的计算量,
而且多台服务器之间存在着session同步的问题。而JWT存储在客户端,不仅减少了服务端的计算量,而且天生支持分布式。
0x1 jwt的结构
JWT由三部分组成:
Header:头部,表明类型和加密算法
Claims:声明,即载荷(承载的内容)
Signature:签名,这一部分是将header和claims进行base64转码后,并用header中声明的加密算法加盐(secre)后构成。
即:
tmpstr = base64(header)+base64(claims)
signature = encrypt(tmpstr,secret)
最后三者用"."连接,即:
token = base64(header).base64(claims).signature
详细的介绍可以看jwt中文文档.
另外jwt官网有调试工具,可以辅助查错。
0x2 在web中如何使用
客户端发送登录请求(这个登录请求是不需要jwt验证的),在登录请求里返回token。
客户端把token保存起来,以后其它需要token的请求就在header里带上token。
0x3 实战
在echo框架中使用jwt
这里是官方文档和教程,说的比较清楚了。
我们仅需要在登录接口里生成jwt的token,并返回,jwt中间件会自动帮我们做jwt的验证。可以把先做分组路由,在分组里使用jwt中间件。
如果不使用框架,可以直接用jwt-go
配合axios.js
我们的前端使用了vue+axios,他嫌每次都拼接header麻烦,于是帮他在网上查了一下,可以配置axios为自动添加header。
axios的代码如下:参考了这篇博客
require('es6-promise').polyfill(); // 引入一次就行
import axios from 'axios';
// 创建 axios 实例
const Axios = axios.create({
baseURL: 'your base url',
timeout: 5000,
});
Axios.interceptors.request.use(
config => {
if (config.method === 'post') {
const formData = new FormData();
Object.keys(config.data).forEach(key => formData.append(key, config.data[key]));
config.data = formData;
}
if (config.url !="/login" && localStorage.token != undefined ){
config.headers.Authorization = 'Bearer ' + localStorage.token;
}
return config;
},
error => {
return Promise.reject(error);
}
);
Axios.interceptors.response.use(
res => {
return Promise.resolve(res);
},
error => {
return Promise.reject(error);
}
);
// 将 Axios 实例添加到Vue的原型对象上
export default {
install(Vue) {
Object.defineProperty(Vue.prototype, '$Axios', { value: Axios });
}
};
注意if (config.method === 'post') 这里是把post过去的数据转为表单,如果不加这一句,提交过去的是文本了,在服务器端无法用getpost(key)这种方式获取参数了。
0x4 调试
要善于利用官网调试工具,我便在jwt加密上掉坑里了。
加密时使用的是HS256,而验证时用的是HS512。
0x5 扩展
由于jwt载荷使用的是base64编码,可以很容易被破解,所以不要放入敏感信息,也不建议放入过多的信息。
jwt里可以存过期时间,所以可以用来做时效性的应用,而且不需要使用数据库。
另外也要避免jwt的重放攻击。
golang前后端jwt对接的更多相关文章
- DevOps 视角的前后端分离与实战
本文作者:CODING - 廖红坤 前言 随着微前端.微服务等技术理念和架构的蓬勃发展,我们已经没必要去讨论为什么要前后端分离这种话题,前后端分离已成为互联网项目开发的标准模式.前后端在各自的领域发展 ...
- JWT 在前后端分离中的应用与实践
关于前后端分离 前后端分离是一个很有趣的议题,它不仅仅是指前后端工程师之间的相互独立的合作分工方式,更是前后端之间开发模式与交互模式的模块化.解耦化.计算机世界的经验告诉我们,对于复杂的事物,模块化总 ...
- 从壹开始前后端分离[.NetCore] 37 ║JWT完美实现权限与接口的动态分配
缘起 本文已经有了对应的管理后台,地址:https://github.com/anjoy8/Blog.Admin 哈喽大家好呀!又过去一周啦,这些天小伙伴们有没有学习呀,已经有一周没有更新文章了,不过 ...
- 从壹开始前后端分离[.netCore 不定期 ] 36 ║解决JWT自定义中间件授权过期问题
缘起 哈喽,老张的不定期更新的日常又开始了,在咱们的前后端分离的.net core 框架中,虽然已经实现了权限验证<框架之五 || Swagger的使用 3.3 JWT权限验证[修改]>, ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十四║ Vuex + JWT 实现授权验证登录
壹周回顾 哈喽,又是元气满满的一个周一,又与大家见面了,周末就是团圆节了,正好咱们的前后端也要团圆了,为什么这么说呢,因为以后的开发可能就需要前后端一起了,两边也终于会师了,还有几天Vue系列就基本告 ...
- 基于前后端分离的身份认证方式——JWT
什么是JWT JWT--Json web token 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应用授权. 现在一般都用redis来出来token做 ...
- 写在开始前---web前后端对接
现阶段接口对接问题: 1.接口乱,不清晰明了,无文档或文档过期 2.接口和业务不匹配.不可用 3.前后端沟通,工程复杂化 4.不能深入了解业务 5.任务延期 注:前后端对业务深入了解,接口之间都是有联 ...
- [django]前后端分离之JWT用户认证
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...
- Spring Security + JWT实现前后端分离权限认证
现在国内前后端很多公司都在使用前后端分离的开发方式,虽然也有很多人并不赞同前后端分离,比如以下这篇博客就很有意思: https://www.aliyun.com/jiaocheng/650661.ht ...
随机推荐
- Entity Framework中实体模型命名空间的问题
在添加一个实体数据模型的时候(就是扩展名为edmx那位)属性里明明设置了自己的命名空间,但是后台的Designer.cs命名空间生成规则却是项目的默认命名空间加edmx文件所在文件夹的名称, 是BUG ...
- 《JAVA与模式》之原型模式(转载)
原型模式其实就是java的拷贝机制 原文出处:http://blog.csdn.net/zhengzhb/article/details/7393528 定义:用原型实例指定创建对象的种类,并通过 ...
- MySQL视图已经授权,但是无法访问
开发发来问题说,开发环境的几个视图已经授权,但是指定用户登录后却无法访问.报错信息如下: [SQL]select * from ipost; [Err] - Access denied for use ...
- idea设置tomcat虚拟路径的两种方法
1.使用tomcat自己的虚拟路径 1.1.在tomcat\config\server.xml中配置 path="/upload" 虚拟路径 E:\photo\upload 图片存 ...
- robotframework + appium 获取android toast
android toast 获取主要方式是在出现toast的时候查找元素:xpath=//*[contains(@text,'记同步')] ,该xpath 表示为toast信息含有 "记 ...
- java对存放实体的list进行排序
java对存放实体的list进行排序: List<DistributionAgentsEntity> allAgents = new ArrayList<DistributionAg ...
- AR模型与数据平稳性之间的关系
作者:桂. 时间:2017-12-19 21:39:08 链接:http://www.cnblogs.com/xingshansi/p/8068021.html 前言 前几天碰到一个序列分析的问题, ...
- 使用Talend Open Studio将数据分步从oracle导入到hive中
先使用Tos建立模型,将Oracle中的数据导入到本地: build job后,形成独立可以运行的程序: 将生成的zip文件,上传到hadoop集群上,有hive环境的机器上: [hive@h1 wo ...
- Atitit 架构的原则attilax总结
Atitit 架构的原则attilax总结 1.1. Rule of three称为"三次原则",指的是当某个功能第三次出现时,才进行"抽象化".是DRY原则和 ...
- Vue2.0 v-for 中 :key 的作用