一篇文章带你分清楚JWT、JWS与JWE

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 随着移动互联网的兴起,传统基于 `session/cookie` 的 web 网站认证方式转变为了基于 OAuth2 等开放授权协议的单点登录模式(SSO),相应的基于服务器 session+ 浏览器 cookie 的 Auth 手段也发生了转变,Json Web Token 出现成为了当前的热门的 Token Auth 机制。

Json Web Token(JWT)

JSON Web Token(JWT) 是一个非常轻巧的规范。这个规范允许我们使用 JWT 在两个组织之间传递安全可靠的信息。

官方定义:JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

image.png

JWT Auth

现在网上大多数介绍 JWT 的文章实际介绍的都是 JWS(JSON Web Signature),也往往导致了人们对于 JWT 的误解,但是 JWT 并不等于 JWSJWS 只是 JWT 的一种实现,除了 JWS 外,JWE(JSON Web Encryption) 也是 JWT 的一种实现。

JWT、JWS 与 JWE

下面就来详细介绍一下 JWTJWE 的两种实现方式:

image.png

JSON Web Signature(JWS) 是一个有着简单的统一表达形式的字符串:

image.png

JWS/JSON Web Signature 组成

1) 头部(Header)
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
JSON内容要经Base64 编码生成字符串成为Header。

2) 载荷(PayLoad)
payload的五个字段都是由JWT的标准所定义的。

  • iss: 该JWT的签发者;
  • sub: 该JWT所面向的用户;
  • aud: 接收该JWT的一方;
  • exp(expires): 什么时候过期,这里是一个Unix时间戳;
  • iat(issued at): 在什么时候签发的;

后面的信息可以按需补充。
JSON内容要经 Base64 编码生成字符串成为负载/PayLoad。

3) 签名(signature)

这个部分 headerpayload 通过 header 中声明的加密方式,使用密钥 secret 进行加密,生成签名。

JWS 的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用 Base64 对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。

JSON Web Encryption(JWE) 相对于 JWSJWE 则同时保证了安全性与数据完整性。

JWE 由五部分组成:

image.png

JWE/JSON Web Encryption 组成

具体生成步骤为:

  • JOSE 含义与 JWS 头部相同;
  • 生成一个随机的 Content Encryption Key(CEK)
  • 使用 RSAES-OAEP 加密算法,用公钥加密 CEK,生成 JWE Encrypted Key
  • 生成 JWE 初始化向量;
  • 使用 AES GCM 加密算法对明文部分进行加密生成密文 Ciphertext,算法会随之生成一个 128 位的认证标记 Authentication Tag
  • 对五个部分分别进行 base64 编码;

可见,JWE 的计算过程相对繁琐,不够轻量级,因此适合与数据传输而非 token 认证,但该协议也足够安全可靠,用简短字符串描述了传输内容,兼顾数据的安全性与完整性。

【转载声明】

目录
相关文章
|
JSON 算法 安全
JWT、JWE、JWS 、JWK 都是什么鬼?还傻傻分不清?
JWT 相信很多小伙伴都知道,JSON Web Token,如果在项目中通过 jjwt 来支持 JWT 的话,可能只需要了解 JWT 一个概念即可,但是现在很多时候我们可能不是使用 jjwt,而是选择 nimbus-jose-jwt 库,此时就有可能接触到一些新的概念,如 JWE、JWS。那么 JWE、JWS 以及 JWT 之间是什么关系呢?
2947 0
JWT、JWE、JWS 、JWK 都是什么鬼?还傻傻分不清?
|
JSON 算法 Java
jwt,jws和jjwt
JWT 是一种标准 官网介绍 jwt.io/introductio… 全称 全称:JSON WEB TOKEN 特点 有两种实现方式: JWS ( JSON Web Signature) JWE ( JSON Web Encryption) 这里我们常用的是这种签名的方式 JWS JWS 特点 由两个 . 分开成三部分 如下 eyJhbGciOiJIUzUxMiJ9.eyJtc2ciOiLmrKLov47lhbPms6jljZrkuLvnmoTlhazkvJflj7cg57uZ5L2g5LiA5qCq5Zub5Y-26I2JIiwic3ViIjoi57uZ5L2g5LiA5qCq
834 0
|
JSON 算法 Unix
JWT、JWS与JWE
JWT、JWS与JWE
523 0
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
223 0
|
27天前
|
JSON 安全 算法
|
6月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
208 0
|
27天前
|
存储 安全 Java
|
4月前
|
JSON 安全 Java
使用Spring Boot和JWT实现用户认证
使用Spring Boot和JWT实现用户认证
|
1月前
|
JSON NoSQL Java
springBoot:jwt&redis&文件操作&常见请求错误代码&参数注解 (九)
该文档涵盖JWT(JSON Web Token)的组成、依赖、工具类创建及拦截器配置,并介绍了Redis的依赖配置与文件操作相关功能,包括文件上传、下载、删除及批量删除的方法。同时,文档还列举了常见的HTTP请求错误代码及其含义,并详细解释了@RequestParam与@PathVariable等参数注解的区别与用法。
|
16天前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
31 0