JWT、JWS与JWE

简介: JWT、JWS与JWE

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

那么什么是JWT呢?JWT是一个轻量级的OAuth2规范,允许我们使用JWT在两个或多个组织之间安全可靠的传递数据。通俗的说JWT其实就是在易碎品外包了层气泡膜,保护数据不会被破坏和破解。

我们通常在网络上所看到的关于JWT讲解的文章大多是讲解的是JWS,因此导致需对人对JWT产生了误解,其实JWS并不是JWT,它只是JWT的一种实现方式。一般常见的JWT实现有JWS和JWE,下面我们来看一下什么是JWS和JWE。


JWS

JWS全称是 Json Web Signatura,是一个简单的统一表达形式的字符串。这个字符串中包含Header、Payload和Signtrue.

其中,Header用于描述JWT的基本信息,一般包含Type(类型)和alg(签名所用的算法),Header的算法必须经过Base64编码。

Payload包含5个字段,这5个字段都是由JWT定义的:


  • iss:JWT签发者;
  • sub:JWT面向的用户;
  • aud:JWT的接收方;
  • exp:unix时间戳定义的过期时间;
  • iat:签发时间
  • …(后面的内容按需补充)


同样,Payload内容也需要经过Base64编码。


Signature这个部分的内容是Header+Payload内容,并经过加密后的字符串。加密方式则是Header中所声明的签名方式。


JWS的目的主要是保证数据在传输过程中不被修改,验证数据的完整性,但是由于使用Base64对消息进行编码,因此无法保证数据不泄露,所以一般不会用它传输敏感数据。


JWE

为了保证数据的安全性与完整性,JWE出现了。JWE包含5部分:JOSE Header、JWE Encrypied Key、Initialization Vector、Ciphertext和Authentication Tag。JWE的生成步骤如下:


  • JOSE与JWS Header一样;
  • 生成随机的Content Encryption Key;
  • 使用 RSAES-OAEP算法,并使用公钥加密CEK,生成JWE Encrypted Key;
  • 生成JWE初始化向量;
  • 使用AES GCM算法对铭文部分加密,生成密问Ciphertext,同时AES GCM算法也会生成一个128位的认证标记Authentication Tag;
  • 对以上5部分分别进行Base64编码,并用点号拼接在一起。


从前面的5各步骤可以看出JWE的生成以及计算过程相对复杂不够轻量,因此它比较适合在数据传输上使用,不建议在token认证中使用。


目录
相关文章
|
JSON 算法 Unix
一篇文章带你分清楚JWT、JWS与JWE
随着移动互联网的兴起,传统基于 `session/cookie` 的 web 网站认证方式转变为了基于 OAuth2 等开放授权协议的单点登录模式(SSO),相应的基于服务器 session+ 浏览器 cookie 的 Auth 手段也发生了转变,Json Web Token 出现成为了当前的热门的 Token Auth 机制。
17525 2
一篇文章带你分清楚JWT、JWS与JWE
|
JSON 算法 安全
JWT、JWE、JWS 、JWK 都是什么鬼?还傻傻分不清?
JWT 相信很多小伙伴都知道,JSON Web Token,如果在项目中通过 jjwt 来支持 JWT 的话,可能只需要了解 JWT 一个概念即可,但是现在很多时候我们可能不是使用 jjwt,而是选择 nimbus-jose-jwt 库,此时就有可能接触到一些新的概念,如 JWE、JWS。那么 JWE、JWS 以及 JWT 之间是什么关系呢?
2605 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
753 0
|
1月前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
113 0
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
1天搞定SpringBoot+Vue全栈开发 (9)JWT跨域认证
|
1月前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
45 2
|
1月前
|
SQL 安全 Java
微服务之Springboot整合Oauth2.0 + JWT
微服务之Springboot整合Oauth2.0 + JWT
27 1
|
1月前
|
JSON 前端开发 Java
Springboot整合JWT
Springboot整合JWT
|
1月前
|
安全 算法 Java
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
70 0
|
1月前
|
前端开发 Java Spring
SpringBoot通过拦截器和JWT令牌实现登录验证
该文介绍了JWT工具类、匿名访问注解、JWT验证拦截器的实现以及拦截器注册。使用`java-jwt`库生成和验证JWT,JwtUtil类包含generateToken和verifyToken方法。自定义注解`@AllowAnon`允许接口匿名访问。JwtInterceptor在Spring MVC中拦截请求,检查JWT令牌有效性。InterceptorConfig配置拦截器,注册并设定拦截与排除规则。UserController示例展示了注册、登录(允许匿名)和需要验证的用户详情接口。
329 1