在实际工作过程中,运行jmeter脚本的时候,开发给了一个jwt的授权信息,到底是做什么用的呢,翻阅了一些资料,整理如下:

一、JWT(Json Web Token)是什么

JWT是一串格式为xxxx.xxxx.xxxxx的字符串,在服务器和客户端之间依靠JWT安全的传递一些不加密信息。

这三个部分分别有自己的名称:header.payload.signature

二、JWT的组成

2.1:header格式如下:

{
"typ":"JWT",
"alg":"HS256"
}

在这里面会说明编码对象是一个JWT,以及使用“HS256”的算法进行加密, 然后由base64将这一json进行转码,生成一串字符串。

2.2:claim

claim是一个json,里面放的是JWT自身的属性,参考这个博文 https://mp.weixin.qq.com/s/vwPyBkkHQZG-ibM1OkETZw中给出的数据说明:

{
"iss":"Issuer —— 用于说明该JWT是由谁签发的",
"sub":"Subject —— 用于说明该JWT面向的对象",
"aud":"Audience —— 用于说明该JWT发送给的用户",
"exp":"Expiration Time —— 数字类型,说明该JWT过期的时间",
"nbf":"Not Before —— 数字类型,说明在该时间之前JWT不能被接受与处理",
"iat":"Issued At —— 数字类型,说明该JWT何时被签发",
"jti":"JWT ID —— 说明标明JWT的唯一ID",
"user-definde1":"自定义属性举例",
"user-definde2":"自定义属性举例"
}

划重点:JWT中可以标注JWT的过期时间,这个时间在测试中可以由开发提供一个超长时间的即可。

然后将claim通过base64转码之后生成的一串字符串称作payload。

2.3:signature

将header与payload组合一起,生成一个字符串header.payload,然后再添加一个秘钥,这个是由服务器发的,用户不能看到,(服务器上也有一份相同的秘钥),用一定的加密方法进行加密,形成一个新的字符串,这个字符串就是signature,作用是确保JWT没有被篡改过。将新生成的字符串与前面的合在一起,就是JWT了。

下面这个图就简便的说明了JWT的由来:

三、JWT的使用流程

客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面

Authorization: Bearer <token>

如果header部分和payload部分被篡改,由于篡改者不知道密钥是什么,也无法生成新的signature部分,服务端拿着原始的秘钥与最新的header和payload生成字符串,与客户端篡改后的不一致,也就无法通过。

最新文章

  1. AFNetworking3.0 Https P12证书
  2. mysql 字符集设置方法
  3. 我的STL之旅 MyStack
  4. Java死锁的例子
  5. locality
  6. Matlab中find函数的使用
  7. java识别文件或字符串的编码格式
  8. 整理网站优化(SEO)的方案
  9. 介绍一款基于jquery好用的编辑框htmlbox.full.js
  10. Java集合初体验
  11. SOFA 源码分析 — 自动故障剔除
  12. mongodb 创建更新语法
  13. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
  14. HTML 和 JavaScript 实现飘花的效果
  15. 下载google code中源码的几个工具
  16. 算法笔记_188:历届试题 危险系数(Java)
  17. C-从源文件到可执行文件的详细编译链接过程
  18. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #10 Fair Group Scheduling
  19. ASP.NET WEB API处理流程
  20. Less-css扩展指定多层嵌套选择器样式

热门文章

  1. MODIS系列之NDVI(MOD13Q1)二:modis数据相关信息
  2. 21.1 Math(数学运算)方法使用 、工具类
  3. "Tag标签"组件:&lt;tags&gt; —— 快应用组件库H-UI
  4. matplotlib 中其他基于Affine2DBase的类
  5. 【python实现卷积神经网络】上采样层upSampling2D实现
  6. redis list 基本操作
  7. ADT_Bundle搭建
  8. 猜数字和飞机大战(Python零基础入门)
  9. 架构师修炼之微服务部署 - Docker简介
  10. 借助leetcode题目来了解BFS和DFS