JWT的浅谈

在实际工作过程中,运行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生成字符串,与客户端篡改后的不一致,也就无法通过。

 

posted on 2019-05-22 10:24  101欢欢鱼  阅读(451)  评论(0编辑  收藏  举报

导航