随着移动互联网的兴起,传统基于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

JWT Auth

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

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

JWT,JWS与JWE

JSON Web Signature(JWS)

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

JWS

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。

JSON内容要经Base64 编码生成字符串成为Header。

载荷(PayLoad)

payload的五个字段都是由JWT的标准所定义的。

iss: 该JWT的签发者

sub: 该JWT所面向的用户

aud: 接收该JWT的一方

exp(expires): 什么时候过期,这里是一个Unix时间戳

iat(issued at): 在什么时候签发的

后面的信息可以按需补充。

JSON内容要经Base64 编码生成字符串成为PayLoad。

签名(signature)

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

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

JSON Web Encryption(JWE)

相对于JWS,JWE则同时保证了安全性与数据完整性。

JWE由五部分组成:

JWE组成

具体生成步骤为:

JOSE含义与JWS头部相同。

生成一个随机的Content Encryption Key (CEK)。

使用RSAES-OAEP 加密算法,用公钥加密CEK,生成JWE Encrypted Key。

生成JWE初始化向量。

使用AES GCM加密算法对明文部分进行加密生成密文Ciphertext,算法会随之生成一个128位的认证标记Authentication Tag。

6.对五个部分分别进行base64编码。

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

java jwe/jws_一篇文章带你分清楚JWT,JWS与JWE相关推荐

  1. 一篇文章带你分清楚JWT,JWS与JWE

    随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基于OAuth2等开放授权协议的单点登录模式(SSO),相应的基于服务器session+浏览器cookie的Aut ...

  2. 【JAVA SE】一篇文章带你弄懂抽象类与接口

    大家好呀,我是制药

  3. java ee 值范围_一篇文章带你读懂: Java EE

    原标题:一篇文章带你读懂: Java EE 点击上图,查看教学大纲 何为 Java EE Java EE是一个标准中间件体系结构 不要被名称"Java PlatformEnterprise ...

  4. (面经总结)一篇文章带你整理面试过程中关于Java 中多线程的创建方式的最全整理

    文章目录 一.Java线程的创建方式 二.继承Thread类 三.实现 Runnable 接口 四.通过ExecutorService和`Callable`实现有返回值的线程 五.基于线程池 六.面试 ...

  5. java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

    一.通过配置文件控制静态资源的热部署 在配置文件 application.properties 中添加: #表示从这个默认不触发重启的目录中除去static目录 spring.devtools.res ...

  6. 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)

    涤生_Woo 2017年11月11日阅读 15544 关注 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机 ...

  7. 一篇文章带你领悟 Frida 的精髓(基于安卓8.1)

    转载(一篇文章带你领悟Frida的精髓(基于安卓8.1)):https://www.freebuf.com/articles/system/190565.html <Frida操作手册>: ...

  8. 一篇文章带你走近Android自定义view

    系列文章目录 一篇文章带你走近Android自定义view 文章目录 系列文章目录 前言 一.为什么要自定义view 二.先看看一个超级简单的自定义view(三个构造函数) 三.了解手机的坐标系 四. ...

  9. 一篇文章带你看懂以及实现加解密技术中的信息防篡改、一码一检、过期失效、多种实现方式

    一篇文章带你看懂以及实现加解密技术中的信息防篡改.一码一检.过期失效.多实现方式 导语 一.简介 二.代码功能介绍以及源码 2.1.AbstractRsa 类 2.2 RsaUtils 类 2.3 R ...

最新文章

  1. MongoDB 安装配置
  2. java js 截取字符串,js截取字符串的三种方法
  3. 熊猫数据集_熊猫迈向数据科学的第一步
  4. Windows环境下配置thrift编译器(VS2015)
  5. 95-36-200-ChannelHandler-系统Channel-LoggingHandler
  6. C语言丨定积分的近似计算
  7. 一个用SAM维护多个串的根号特技
  8. 本科计算机技术与应用知识点,《软件工程》经典考试例题题,重点的知识点(含答案)...
  9. 统一Retrofit失败的处理情况
  10. 1.4.4 Mother's Mil 母亲的牛奶(DFS)
  11. 37、T5L迪文屏C51开发之绘制2D形状
  12. 将图片转化成SVG格式(亲测可行)
  13. imx6ul pwm 调试
  14. Matplotlib_2
  15. tf.name_scope与tf.variable_scope用法区别
  16. SSM框架体会和小结(短学期实训)
  17. Python常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总
  18. 中鑫吉鼎|你知道自己理财期间这四个更重要吗
  19. 渗透测试-xss安全防御之href输出和js输出
  20. 管家婆软件B/S系列打印管理器报错解决

热门文章

  1. R语言之空间数据操作
  2. CH340下载程序时DTR和RTS的电平变化分析
  3. ChatGPT国内镜像站
  4. Linux网络设备驱动结构概述
  5. mp4压缩视频不改变画质?怎么压缩视频大小不改变清晰度?
  6. 【Internet Explorer】IE11卸载不干净导致无法安装IE10
  7. linux安装驱动报错权限没有,linux系统下安装显卡驱动程序.doc
  8. 二进制转换八进制图解_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...
  9. 在几何画板中如何制作圆柱的侧面展开动画_如何用几何画板做三棱柱的侧面展开动画...
  10. github软件---百度网盘加速