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

简介: 随着移动互联网的兴起,传统基于 `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 之间是什么关系呢?
3346 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
970 0
|
JSON 算法 Unix
JWT、JWS与JWE
JWT、JWS与JWE
598 0
|
9月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
1684 5
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
637 0
|
11月前
|
JSON 安全 算法
|
8月前
|
XML JavaScript Java
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
514 11
|
11月前
|
存储 安全 Java
|
JSON 安全 Java
使用Spring Boot和JWT实现用户认证
使用Spring Boot和JWT实现用户认证
|
10月前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
435 8