上一篇我们提到了token支持JWT格式,那这一篇来盘一下JWT到底是个啥。

JSON Web Token(JWT)

https://jwt.io
JSON Web Token (JWT) (RFC 7519)

JSON Web Token (JWT) 是一个开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间传输信息(Claims)。这些信息以JSON格式定义。

JWT 可以理解为是一个规范。实际上,具体的实现方案有 JWS(JSON Web Signature) 和 JWE(JSON Web Encryption)。

JWT 本质就是一个字符串,不同的实现方案的差异其实就是这个字符串的构成有所不同。

网上大多数介绍JWT的文章实际介绍的都是JWS,只是JWS比较常用,所以提起JWT经常指的是JWS

JWT vs 传统token

传统token认证方式,服务端生成token并保存对应的认证信息,将token返回给前端,前端携带token调用服务端接口时,服务端会检查是否有对应的认证信息,若有,则通过验证,反之亦然。

对于JWT,先要介绍下它的的自包含特性,就是指将认证信息直接编码放到JWT中,服务端就不需要存放认证信息。
基于JWT的认证方式,服务端生成JWT,直接返回给前端。

这里就出现了另一个问题,服务端接收到一个带着JWT的请求,怎么验证JWT是合法的呢?也就是判断这个JWT就是自己生成的呢?当然得是自己生成的JWT才能请求自己的接口,随便来个JWT就糊弄过去,那不乱套了。

这里就要介绍最最常用的JWT实现方案 JWS,JWS 使用签名算法来实现JWT的验证。(加签、验签)

JSON Web Signature(JWS)

JSON Web Signature (JWS) (RFC 7515)

JWS 由三部分组成:Header + Payload + Signature,各部分以 . 分隔,结构如下:
Header.Payload.Signature

Header

Header 用于描述JWS的基本的信息,例如其签名算法。

Header 的原文为JSON格式,规定了一些特殊的key,比如 alg(algorithm,签名算法)、typ(type,类型) 等。
经过 Base64 编码生成字符串,作为JWS第一部分。

Payload

Payload 其中包含声明(Claims)。声明是关于实体(通常是用户)和附加数据的陈述。

Payload 的原文为JSON格式,规定了一些特殊的key,比如 iss(issuer,发布者)、iat(issue at,发布时间)、exp(expiration,过期时间)、aud(audience,使用者) 等。(开发者可以自由添加key用于传输数据,比如用户名、权限等等)
经过 Base64 编码生成字符串,作为JWS第二部分。

注意,Payload 只是进行了编码,而非加密,其过程是可逆的!因此,绝对不能存放敏感信息,如密码。

Signature

Signature,即签名,它由编码后的header和payload,使用用户指定的密钥(JWK),采用header中指定的签名算法(JWA)生成。

Signature 可用于验证数据是否篡改(保证数据完整性)。

接收方收到JWS时,可以采用同样的签名算法和密钥验证签名signature,如果正确,说明数据没有被篡改。(验签)

案例

下面以一个实际的 JWS 讲解各个部分:demo

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • Header
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

使用Base64解码后,得到以下JSON对象:

{"alg": "HS256","typ": "JWT"
}
  • Payload
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

使用Base64解码后,得到以下JSON对象:

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}
  • Signature
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

密钥为:your-256-bit-secret,使用Header指定的签名算法对该签名进行验证(验签)。

其他

  • JWA(JSON Web Algorithm):JWT的加密算法
  • JWK(JSON Web Key):JWT的密钥。在对称加密算法中指的是密钥,在非对称加密算法中则指的是公/私钥
  • JWKS(JSON Web Key Set):指多个JWK组合在一起的一种格式

reference:
Introduction to JWT (Also JWS, JWE, JWA, JWK)
JWT,JWS与JWE
JWT详解


end

3 JWT 和 JWS相关推荐

  1. jwt重放攻击_4个点搞懂JWT、JWS、JWE

    1.JWT是何物,有哪些常用的场景 JWT(json web token)是设计一种简洁,安全,无状态的token的实现规范rfc7519,通常用于网络请求方和网络接收方之间的网络请求认证. jwt的 ...

  2. 一文理解 JWT、JWS、JWE、JWA、JWK、JOSE

    原文收录 GitBook--统一接口认证解决方案 JsonWebToken 关于JsonWebToken的专业名词解释: unsecured JWT:默认头部{"alg": &qu ...

  3. 关于 JWT、JWS、JWE

    JWT(JSON Web Token) JWT 是一个字符串,表示了一组字段声明的集合,以 JSON 格式组织数据,并以 JWS 或 JWE 方式编码. JWT 由 Header.Payload.Si ...

  4. JWT、JWE、JWS 、JWK 到底是什么?该用 JWT 还是 JWS?

    JWT 相信很多小伙伴都知道,JSON Web Token,如果在项目中通过 jjwt 来支持 JWT 的话,可能只需要了解 JWT 一个概念即可,但是现在很多时候我们可能不是使用 jjwt,而是选择 ...

  5. JWT、JWS与JWE

    以前WEB网站认证方式都是基于传统的服务器session+浏览器cookie的Auth手段,近年来Web网站认证方式逐步转变为基于OAuth2等开放协议的SSO模式.其中Json Web Token( ...

  6. JJWT:JWS, JWE, JWK, JWA, JWT

    JWS, JWE, JWK, JWA, JWT JWS:JSON Web Signature,Digital signature/HMAC specification(签名) JWE:JSON Web ...

  7. 【JWT】JWT JWS JWE | 在线JWS解析工具

    JWT.JWS.JWE 主要参考: https://www.51cto.com/article/630971.html 辅助参考: https://www.jianshu.com/p/50ade6f2 ...

  8. 只知道JWT,那JWE、JWS、JWK、JWA呢?

    2022年的开工福利已经发布,点击下面按钮获取最新PDF. 移动端兴起和OAuth2的流行导致JWT这几年火得一塌糊涂.今天要介绍另一个规范集JOSE[1],全称Javascript Object S ...

  9. 一文读懂JWT,JWS,JWE

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:zh_coder https://blog.csdn.net/hellowordap ...

最新文章

  1. matlab生成ai图片,MATLAB绘图:导出矢量图
  2. Tensorflow— word2vec
  3. 简单实现迷你Vue框架
  4. 转载-如何做好项目的需求与业务调研▲▲▲
  5. linux切换图片的代码,cacaview – Linux终端下将图片转换ASCII Art代码图案
  6. 什么是框架?spring mvc框架
  7. IOC操作Bean管理注解方式(组件扫描配置)
  8. 《FusionCharts学习及使用笔记》之 第一篇
  9. $.ajax()方法
  10. 2019重庆整治金融乱象出实招:依法处置高风险机构 推进网络借贷风险专项整治...
  11. Comparator改写
  12. DataNucleus之JDO操作演示样例
  13. VirtualBox安装MAC虚拟机,屏幕分辨率小,扩大的办法
  14. Snagit 2021\2022
  15. 浏览器架构的误区和瘦客户端应用
  16. GITEE提交代码时出现“文本是相同的,但文件不匹配“问题解决方法
  17. 移动端web总结(一)——JDM项目总结
  18. java幸运抽奖系统_java实现幸运抽奖系统
  19. 使用BG/NBD模型与Gamma-Gamma模型预测客户的生命周期价值CLV/LTV
  20. 职业学校计算机教学创新论文题目,信息技术论文题目大全

热门文章

  1. Thunder v7.9.5.4480 Ayu 优化版
  2. python不同曲线设置标签_python 绘制拟合曲线并加指定点标识的实现 Python怎么实现非线性的拟合...
  3. PrestaShop 1.7.7.0 Stable 发布了!
  4. 分布式数据结构与算法面试题
  5. 【数据库】 - postgresql数据库执行计划
  6. 面试必看的注意事项在这里!
  7. 2022年全国职业院校技能大赛赛项正式赛卷
  8. UninstallToo卸载软件
  9. 走进少儿编程教育的基础性原理
  10. 幼儿园调查过程怎么写_如何写幼儿园调查问卷总结