JWT相关学习(纯天然手写)
JWT(Json Web Token)是一种token认证方式,相对于传统的session认证方式。
一、为什么需要认证?
一个系统,如果想使用其功能,势必要进行登录操作,登录验证用户名和密码,通过http通讯协议传输,但是HTTP协议属于无状态协议,则登录之后的http通讯如果没有认证,那么任何未登录的人都可以去访问了。所以需要认证这种方式来杜绝这样的事情发生。
二、传统session认证方式有如下几个缺点:
1、用户登录后session需要存储在服务端中,当有大量用户登录时候,服务端会存储大量的session,缺点就是占用大量资源。
2、服务端session存储位置如果为内存,则会影响负载均衡。
3、客户端将session存放在cookie中,如果其他人获得cookie,则可进行伪造。
三、jwt的优点
1、服务端无需存储jwt,不需要占用大量资源。
2、jwt为json格式,占用流量小。
3、因为无状态不存储,所以完全不影响负载均衡。
四、JWT说明:
JWT分为三部分,head(头),payload(载荷)以及签名。
其中头head写明算法类型(大部分为固定)并且使用Base64进行编码,载荷payload存放传输的信息并且使用Base64进行编码,对于我们系统来说是JwtUser这个对象的JSON形式字符串以及失效时间(我们系统当前为24小时)。
签名就是讲上述head和payLoad进行Base64的字符串连接以后,加盐,组合加密,其中盐是存放在服务端里,对于我们系统来说,是服务端配置文件中存储,
最后的结果就是 head头的Base64编码结果 + ‘,’ + payLoad的Base64编码结果 + ',' + 签名。
五、实现方式:
使用jjwt来进行实现(代码以及quickStart可以在GITHUB上查看)
六、传输方式:
客户端http协议调用接入,接入系统RPC协议调用账户系统,账户系统如果登录成功,则生成jwt返回给接入系统,接入系统将jwt字符串返回给客户端,客户端以后每次对于该用户的http调用都在http请求头信息中添加此jwt字符串。接入收到jwt之后,进行解析,如果解析出错则异常抛出不予操作。如果JWT正常,则继续操作。
- 动手写一个Python Web 框架学习笔记 - 相关依赖学习(2)
- mysql 学习记录(二十四)--mysql相关工具
- Linux相关运维集群学习视频资料分享(自取)
- CCIE学习(7)――VLAN相关命令汇总
- 深度学习-使用cuda加速卷积神经网络-手写数字识别准确率99.7%
- Caffe学习-手写数字识别
- 深度学习目标检测相关论文资源集合
- C语言快速学习笔记001-相关语法
- linux 系统相关学习: 系统介绍
- linux相关指令学习
- 工作流引擎Activiti学习第四天(五)--- 基础知识学习之流程定义相关
- Oracle基础学习一:安装Oracle9i Database及Client 认识相关工具
- Linux学习记录--关机相关操作
- 比较好的dx opegl学习相关网站
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)ArcGIS相关知识补充学习
- rails学习笔记: rake db 相关命令
- !JAVA学习提高之---- JAVA日期格式化及相关操作
- [学习笔记] 查找相关文档
- Asp.Net Ajax 学习笔记10 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(下)
- 操作系统线程相关知识学习