3 JWT 和 JWS
上一篇我们提到了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相关推荐
- jwt重放攻击_4个点搞懂JWT、JWS、JWE
1.JWT是何物,有哪些常用的场景 JWT(json web token)是设计一种简洁,安全,无状态的token的实现规范rfc7519,通常用于网络请求方和网络接收方之间的网络请求认证. jwt的 ...
- 一文理解 JWT、JWS、JWE、JWA、JWK、JOSE
原文收录 GitBook--统一接口认证解决方案 JsonWebToken 关于JsonWebToken的专业名词解释: unsecured JWT:默认头部{"alg": &qu ...
- 关于 JWT、JWS、JWE
JWT(JSON Web Token) JWT 是一个字符串,表示了一组字段声明的集合,以 JSON 格式组织数据,并以 JWS 或 JWE 方式编码. JWT 由 Header.Payload.Si ...
- JWT、JWE、JWS 、JWK 到底是什么?该用 JWT 还是 JWS?
JWT 相信很多小伙伴都知道,JSON Web Token,如果在项目中通过 jjwt 来支持 JWT 的话,可能只需要了解 JWT 一个概念即可,但是现在很多时候我们可能不是使用 jjwt,而是选择 ...
- JWT、JWS与JWE
以前WEB网站认证方式都是基于传统的服务器session+浏览器cookie的Auth手段,近年来Web网站认证方式逐步转变为基于OAuth2等开放协议的SSO模式.其中Json Web Token( ...
- JJWT:JWS, JWE, JWK, JWA, JWT
JWS, JWE, JWK, JWA, JWT JWS:JSON Web Signature,Digital signature/HMAC specification(签名) JWE:JSON Web ...
- 【JWT】JWT JWS JWE | 在线JWS解析工具
JWT.JWS.JWE 主要参考: https://www.51cto.com/article/630971.html 辅助参考: https://www.jianshu.com/p/50ade6f2 ...
- 只知道JWT,那JWE、JWS、JWK、JWA呢?
2022年的开工福利已经发布,点击下面按钮获取最新PDF. 移动端兴起和OAuth2的流行导致JWT这几年火得一塌糊涂.今天要介绍另一个规范集JOSE[1],全称Javascript Object S ...
- 一文读懂JWT,JWS,JWE
点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:zh_coder https://blog.csdn.net/hellowordap ...
最新文章
- matlab生成ai图片,MATLAB绘图:导出矢量图
- Tensorflow— word2vec
- 简单实现迷你Vue框架
- 转载-如何做好项目的需求与业务调研▲▲▲
- linux切换图片的代码,cacaview – Linux终端下将图片转换ASCII Art代码图案
- 什么是框架?spring mvc框架
- IOC操作Bean管理注解方式(组件扫描配置)
- 《FusionCharts学习及使用笔记》之 第一篇
- $.ajax()方法
- 2019重庆整治金融乱象出实招:依法处置高风险机构 推进网络借贷风险专项整治...
- Comparator改写
- DataNucleus之JDO操作演示样例
- VirtualBox安装MAC虚拟机,屏幕分辨率小,扩大的办法
- Snagit 2021\2022
- 浏览器架构的误区和瘦客户端应用
- GITEE提交代码时出现“文本是相同的,但文件不匹配“问题解决方法
- 移动端web总结(一)——JDM项目总结
- java幸运抽奖系统_java实现幸运抽奖系统
- 使用BG/NBD模型与Gamma-Gamma模型预测客户的生命周期价值CLV/LTV
- 职业学校计算机教学创新论文题目,信息技术论文题目大全
热门文章
- Thunder v7.9.5.4480 Ayu 优化版
- python不同曲线设置标签_python 绘制拟合曲线并加指定点标识的实现 Python怎么实现非线性的拟合...
- PrestaShop 1.7.7.0 Stable 发布了!
- 分布式数据结构与算法面试题
- 【数据库】 - postgresql数据库执行计划
- 面试必看的注意事项在这里!
- 2022年全国职业院校技能大赛赛项正式赛卷
- UninstallToo卸载软件
- 走进少儿编程教育的基础性原理
- 幼儿园调查过程怎么写_如何写幼儿园调查问卷总结