什么是JWT?

JSON Web Token (JWT) 是一种开放标准 (RFC 7519) 定义了一种用于安全传输的紧凑、自包含(注:或自说明) 的Json结构, 被传输的信息可以通过JWT内容中的算法+密钥进行加密解密,来确保信息可信。JWT可以使用一个加密串 (使用HMAC 对称算法,或非对称算法RSAECDSA)

JWT用途

JWT主要用于两种场景:认证(Authorization)信息加密传递

JWT结构

JWT主要分为三部分:

  • Header
  • Payload
  • Signature

JWT形式为Header.Payload.Signature,三个部分都是json通过Base64加密而成,也就是说:JWT可以被任何人读取,只要使用Base64UrlENcode解密下就可以!(信息加密后边讲)

下面分别介绍这三部分内容与其组成:

Header内容

Header这部分包含令牌所用的算法(alg:algorithm, 常用的有HMAC SHA256或RSA)和 令牌的类型(typ: Token Type,JWT类型只能是"typ":"JWT")未被加密前的样子就像

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

Payload内容

Payload这部分包含token的信息,这部分可以包含 已被注册信息、公有的信息、私有的信息,提供了很多可以自定义的部分

官方给了一些推荐使用的已定义的参数名(已被注册信息):

  • "iss" (Issuer) Claim
  • "sub" (Subject) Claim
  • "aud" (Audience) Claim
  • "exp" (Expiration Time) Claim
  • "nbf" (Not Before) Claim
  • "iat" (Issued At) Claim
  • "jti" (JWT ID) Claim

官方的例子:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

公有的信息、私有的信息都是自定义的,注意不要与官方给的冲突即可,另外注意保持参数尽量少且不要暴露隐私数据

JWT的长度比较长,如果保存JWT到cookie中,可能会突破cookie的4k存储限制,所以需要保持参数尽量少

Signature内容

签名部分使用Header中定义的算法与信息传递方的密钥(公钥/私钥),把经过Base64Url加密的Header与Payload使用.连接在一起,进行加密得出签名。用来验证此JWT信息未被篡改

最后整体放在一起使用.连接在一起,它长这样:

下文预警

本文内容主要是为了引出下文使用JWT作为Spring Security OAuth2的token存储

最新文章

  1. CSS3 动画效果带来的bug
  2. Manacher
  3. 虚拟机下Ubuntu没有GUI图形界面,解决方法
  4. [转]禁用和启用链接(a元素|LinkButton)的js方法
  5. try、catch、finally的使用分析---与 return 相关
  6. Migration of ASP.NET app from IIS6 to IIS7 (7.5)
  7. JS方法在iframe父子窗口间的调用
  8. c#利用WebClient和WebRequest获取网页源代码
  9. linux之cal命令
  10. Win7下qt5.3.1+opencv2.4.9编译环境的搭建(好多 Opencv2.4.9源码分析的博客)
  11. C语言程序转换为Python语言
  12. 洛谷-火柴棒等式-NOIP2008提高组复赛
  13. Vue.use自定义自己的全局组件
  14. Java之进程与线程
  15. UIImage类方法总结及UIImage生成方法对比
  16. NOIP2015斗地主(搜索+模拟+贪心)
  17. JavaSE习题 第四章 类与对象
  18. 在django中,执行原始sql语句
  19. idou老师教你学istio :基于角色的访问控制
  20. js / jquery 获取和设置 FCK Editor 的值

热门文章

  1. .deb文件安装应该怎么做
  2. Requests库主要方法解析以及Requests库入门需要掌握的框架
  3. AllowsTransparency="True" 怎么放大缩小窗体
  4. 关于GC(下):CMS和G1GC的比较
  5. CSS3 盒模型---css初始化会用到:box-sizing: border-box 盒子大小为 width 就是说 padding 和 border 是包含到width里面的
  6. ES6变量的解构赋值(二)对象的解构赋值
  7. 认识Metasploit框架
  8. [b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager
  9. [20190510]rman备份的疑问7.txt
  10. ctr预估论文梳理和个人理解