一、JWT简介【对于了解JWT的童鞋,可以直接跳到最后】

咱们就不弄那些乱七八糟的概念,就简单点说一下JWT是什么、有什么和能干什么

1、 JWT概念和作用

JWT全称为json web token,说白了是什么呢? 就仅仅只是一个字符串而已,例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.OLvs36KmqB9cmsUrMpUutfhV52_iSz4bQMYJjkI_TLQ 这样。

O(∩_∩)O 是不是特别长,特别丑?没关系,现在给大家解释一下这个东东到底是什么

2、JWT组成【对于JWT有基本了解的人可以忽略这一部分】

JWT包含了三个主要部分: Header.Payload.Signature,以" . "来进行分割,以上式举例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.
OLvs36KmqB9cmsUrMpUutfhV52_iSz4bQMYJjkI_TLQ

注意尾巴上的两个点哦。

2.1 Header作用

Header部分主要存储关于签名算法的信息,通常包含两个部分:token类型和采用的加密算法,大致源内容如下:
{ “alg”: “HS256”, “typ”: “JWT”} ,然后使用Base64Url编码组成了Header部分,结果大致如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9。

2.2 Payload作用

Payload翻译过来就是负载嘛,就是装东西嘛对不对,所以这一部分其实是用来存储一些信息的,至于是什么信息呢,重点来了 ----> 无所谓,惊不惊喜,意不意外?

其实Payload是一个比较重要的部分,这个东西其实就是一个数据实体,俗称Claim,JWT并不强制使用,它默认这一部分数据为业务数据,是系统业务需要的数据,可有可无,可多可少。一般在不特殊修改的情况下,主要包含几个部分: iss(签发者),exp(过期时间戳), sub(面向的用户), aud(接收方), iat(签发时间),大致的源样式是这样:
{ “sub”: “1234567890”, “name”: “John Doe”, “admin”: true},经过Base64Url 编码以后,会变成JWT的第二部分字符串:eyJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0。

2.3 Signature作用

创建签名需要使用编码后的header和payload以及一个秘钥,组成的公式:编码后的header、编码后的payload、一个secret进行加密HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

以上就是JWT的几个主要组成部分。

3、JWT的主要作用

JWT最开始的初衷是为了实现授权和身份认证作用的,可以实现无状态、分布式的Web应用授权,大致实现的流程如下:

###图中内容可见,JWT的使用流程大致有几步:
1、客户端需要携带用户名/密码等可证明身份的内容去授权服务器获取JWT信息;

2、每次服务都携带该Token内容与Web服务器进行交互,由业务服务器来来验证Token是否是授权系统发放的有效Token,来验证当前业务是否请求是否合法。

注意:这里很多刚接触JWT的童鞋经常会问一个问题,是不是每次请求都申请一次Token,这里需要注意,如果不是对于安全性要求非常高的情况,不建议每次请求都申请,因为会增加业务耗时,大部分时候我个人喜欢在登陆时申请,然后使用JWT的过期时间或其他手段来保障JWT的有效性

后来随着JWT使用的场景的成熟,逐渐引申的意义也可以抵御跨站请求伪造攻击【就不解释这是什么了,可以百度一下】和签名验签的流程。

以下是福利环节,也是重点答疑环节。

a)如何保证JWT的安全呢?

注意,这里经常会有一个误区,JWT本身和安全没关系,它就仅仅只是一个字符串,使用它来做安全远不如类似于RSA2这样的非对称加密的形式来的实在,由于客户端的程序对用户几乎完全透明,验签的过程对于他们来讲也是透明的,所以安全性肯定不会靠这个来实现,如果实在怕JWT的被盗取,可以考虑在Payload部分加入一些客户端独有的非敏感信息,用于在服务端来进行核验,比如使用MAC-Message Authentication Code、或者公钥之类的等等; 或者干脆就把生效时间设置的短一些,也可以减少暴漏的风险。

b)要不要将用户信息存入Payload呢

其实是一个道理,由于JWT本身没有安全性可言,所以存储用户信息,尤其是敏感数据是一件很可怕的事情,建议不要存放这一类信息;而且将太多的信息存入Payload以后,就增加了网络传输以及签名和验签的复杂度,也会造成时间的浪费;

c)如果想上传视频,如何使用JWT进行签名呢

这件事要分两头说,JWT签名对我个人而言,并不是所有数据都要签名,因为会增加业务耗时和复杂度,所以我一般都是对一些敏感数据才会进行签名。基于以上基点,不难分析出这个问题的答案:
1、如果视频并不算敏感数据,那么自然就不存在签名问题
2、如果确实认为视频是敏感数据,可以通过nodejs之类的东东获取到上传文件的对象,然后进行操作,当然,这是一个非常复杂的工作,要有心理准备哦。
3、这个问题其实仅仅只是一个例子,所有类似的问题处理方法差不多,只要意识到什么数据应该签名,什么数据可以不签名,其他都是一些技术细节,这里就不讨论了。

作者:Allen
链接:https://www.imooc.com/article/42967
来源:慕课网
本文原创发布于慕课网

2020-10-27漫谈JWT(转载)相关推荐

  1. 2020.10.27 北京阿里大文娱一面总结

    2020.10.27 北京阿里大文娱一面总结 先说结果:没过

  2. 398、Java框架52 -【Hibernate - 分页、两种获取方式】 2020.10.27

    0.目录 1.分页 2.分页,从第3个开始,一共查询5个Product 3.延迟加载 4.对于id不存在的对象的处理 5.参考链接 1.分页 使用Criteria进行分页查询 无论你使用的是Oracl ...

  3. 2020.10.27【GWAS】丨使用vcftools绘制pi(θπ) 选择消除分析图

    这两天在整理GWAS流程,发现绘制θπ选择消除分析图在网上只能找到计算π的代码,但是没有绘图代码,于是自己搞了一下,供大家参考. vcftools --vcf AxiomGT1.calls.vcf - ...

  4. 测试开发工作者日记:2020.10.21

    最近忙着搬家,西北旺那边村委会和某开发商 联合下达了腾退指令,所有人一周内滚蛋.作为每次抵挡的靠山-房东 也终于妥协了.周围很大一片区域的几乎半个海淀和半个昌平的公寓和房东们,都一瞬间知道了这个大新闻 ...

  5. 2020.10月做题记录

    PS:本博客仅选择了一些作者认为有必要记录的题目进行记录. week -1 2020.09.28-2020.10.4 军训+国庆放假-就这样又废了一周- 2020.10.04 回来第一天完全没有状态- ...

  6. Daily Scrum 10.27

    今天毛宇已经完成了游戏每个模块的整体设计,并且大家聚在一起,对这些模块进行了具体的讨论和分析,包括模块的具体功能.接口.模块儿间的交互,以及注释的规范等等.大家看到彼此都能够按时完成任务,并且同步地进 ...

  7. 国办发明电〔2020〕27号:国务院办公厅关于2021年部分节假日安排的通知

    国务院办公厅关于2021年部分节假日安排的通知 国办发明电[2020]27号 各省.自治区.直辖市人民政府,国务院各部委.各直属机构: 经国务院批准,现将2021年元旦.春节.清明节.劳动节.端午节. ...

  8. 泰坦以太(以太流说) titan_ysl 2020.01.27

    泰坦以太(以太流说) titan_ysl 2020.01.27 从学习物理到现在,几十年来,我一直认为以太的存在能最合理地解释许多物理现象,但由于一直没人给于其适当的定义,导致其被废弃,从而让现代物理 ...

  9. 【不忘初心】Win10_20H2_2009_19042.572_X64_六合一_[纯净精简版](2020.10.29)

    母版来自MSDN  WIN10_20H2.19042.508,集成补到19041.572,20H2相比1909 2004版本要稳定很多,精简起来也比较顺手,相对来说体积比之前的要小一些,精简方法基本上 ...

  10. 192.168.1.10/27,后面的27是什么意思,这样写限制的网络是哪些?

    转载来自:http://blog.csdn.net/forest_fire/article/details/71703075 IP地址最后一位斜杠是什么意思?比如192.168.1.10/27?还有I ...

最新文章

  1. 豆瓣评分 9.4 的算法巨著,这本书带无数读者入门算法
  2. 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
  3. 使用Java流查询数据库
  4. 923D - 单片机进阶步骤
  5. linux新手常用命令
  6. 【Spark亚太研究院系列丛书】Spark实战高手之-构建Spark集群-安装Ubuntu系统(3)
  7. collections模块 :namedtuple、deque、defaultdict、OrderedDict、ChainMap、Counter
  8. python基于scipy模块实现统计学中三大相关系数的计算
  9. Docker备份镜像和重新载入镜像
  10. T-SNE可视化实现
  11. 曙光服务器如何重新设置u盘启动_曙光开机光驱启动设置
  12. 【二进制】鑫鑫的算术
  13. Linux常用命令-云计算篇-100%亲测超详细讲解
  14. Unittest-单元测试3
  15. iphone app中读取本地txt,csv文件 转载
  16. android内存显示修改,涨姿势:修改这个系统选项Android手机再也不用清内存!速度飞起...
  17. 气象、生态、遥感、水文、洪水、语言、地质、双碳等领域模型应用教程
  18. 电脑培训中心是“培”训还是“被”训
  19. python符号积分
  20. C/C++ CGI处理文件上传

热门文章

  1. luat驱动LCD屏幕
  2. 【Python】只需2行代码,轻松将PDF转换成Word(含示范案例)
  3. pytorch多卡并行模型的保存与载入
  4. 分享一些Photoshop的教程电子档(pdf格式),初学者与设计师适用
  5. java poi导出下载excel报表或下载到指定路径
  6. 永远不要忽视 粉红色/红色的异样字体 在你不知道为什么跟你期望偏差那么大的时候,,不要急记得去问问为什么
  7. 直播APP源码iOS 调用系统铃声震动
  8. 服务器主板用什么芯片,C610芯片服务器主板用什么机箱好?
  9. 小米手机电池校正_华为小米等安卓福音:超实用手机电池校正 解决电池虚标不耐用!...
  10. Java的时间格式化