学习JWT

Posted mercycnblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习JWT相关的知识,希望对你有一定的参考价值。

定义

JWT(Json Web Token)广义上是一个标准名称,狭义上是指用来传递token的字符串。

结构

JWT由三个部分组成:header(头部)、payload(载荷)和signature(签名)。

  • header:描述JWT最基本信息,如类型(type)和签名所用的算法(algorithm)

{

"alg": "HS256",

"typ": "JWT"

}

  • payload:用来承载要传递的数据,它的json结构实际上是对JWT要传递的数据的一组声明,这些声明被JWT标准称为claims,它的一个“属性值对”其实就是一个claim,每一个claim的都代表特定的含义和作用。

{
"iss": "Online JWT Builder",

"exp": 1448333419,

"aud": "www.example.com",

"sub": "[email protected]",

"Role": [ "Manager", "Project Administrator" ]

}

根据JWT的标准,这些claims可以分为以下三种类型: a. Reserved claims(保留,JWT标准规定的)b.Public claims c.Private claims(自定义的claims)。
把这个json结构做base64url编码之后,就能生成payload部分的串.

  • signature:签名是把header和payload对应的json结构进行base64url编码之后得到的两个串用英文句点号拼接起来,然后根据header里面alg指定的签名算法生成出来的。

验证过程

  • 首先把header做base64url解码,得到JWT用的什么算法做的签名;
  • 然后用这个算法,再次用同样的逻辑对header和payload做一次签名,并比较这个签名是否与JWT本身包含的第三个部分的串是否完全相同,只要不同,就可以认为这个JWT是一个被篡改过的串,自然就属于验证失败了;
  • 完成解码并验证签名通过后,对payload中的claim(exp、nbf、aud等)信息进行验证;
  • 全部通过后,根据获取的用户的角色权限信息,进行对请求的资源的权限逻辑判断;
  • 如果权限逻辑判断通过则通过Response对象返回;否则则返回HTTP 401。

参考这里

参考这里



以上是关于学习JWT的主要内容,如果未能解决你的问题,请参考以下文章

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

flask验证登录学习过程---实践flask_jwt

学习笔记:python3,代码片段(2017)

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

koa-jwt 全面解析,安检利器!