学习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": "jrocket@example.com",

"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。

参考这里

参考这里

posted @ 2018-10-05 16:25  hello_mercy  阅读(165)  评论(0编辑  收藏  举报