JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。

今天我们就来简单的认识一下 JSON Web Token。

JWT 认证和 session认证的区别

首先需要说明 JSON Web Token 是可以用于认证的,那么就先来对比一下 JSON Web Token 认证和 传统的 session 认证的区别,传统的 session 认证是有状态的,也就是说我们需要在服务端保存用户的认证信息,如果服务端重新或者换一台服务器,那么这个认证就失效了,并且传统的 session 的认证方式扩展起来不是那么的容易。

基于 JSON Web Token 的鉴权机制类似于 http 协议,是一种无状态的,服务器不需要保存用户的认证信息或者会话信息,这也就意味着 JWT 认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,也是由于这个特性,JWT 在微服务架构中应用广泛。

JSON Web Token 的组成

一个 JSON Web Token 实际上就是一个字符串,它由三部分组成:头部、载荷与签名,如下图所示:

1、头部(header )

头部用于描述关于该 JSON Web Token 的最基本的信息,例如其类型以及签名所用的算法等,通常如下所示:

{ "alg": "HS256", "typ": "JWT"}

alg属性:表示签名使用的算法,默认为HMAC SHA256(写为HS256)typ属性:表示令牌的类型,JWT令牌统一写为JWT头部一般使用 base64 加密,加密后密文:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

2、载荷(payload)

载荷是 JSON Web Token 的主体内容部分,里面存放一些有效信息,JSON Web Token 标准定义中定义了以下 5 个字段:

iss: 该JWT的签发者sub: 该JWT所面向的用户aud: 接收该JWT的一方exp(expires): 什么时候过期,这里是一个Unix时间戳iat(issued at): 在什么时候签发的除了标准定义中的字段外,我们还可以自定义字段,比如在 JWT 中,我们的载荷信息可能如下:

{ "sub": "1234567890", "name": "pingtouge", "admin": true}

我们需要注意,在默认情况下 JWT 是未加密的,每一个人都可以读取其内容,因此在载荷中,不要存放私密信息,防止信息泄露。

3、签名(signature)

签名是 JSON Web Token 中比较重要的一部分,前面两部分都是使用 Base64 进行编码的,signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥,然后使用 header 中指定的签名算法(HS256)进行签名,签名的作用是保证 JWT 没有被篡改过。

为什么需要签名?

对于加密算法来说,碰撞概率还是比较小的,一般而言,不同的输入加密后的输出是不一样的,不同输入产生相同结果的概率还是相当小的,所以可以利用加密算法的这个特性来判断 JWT 是否被篡改过。

假如有人篡改了载荷中的信息,再进行编码的话,那么新的头部和载荷的签名跟之前的签名是不一样的,并且如何加密的密钥不一样的话,得出来的签名结果也会不一样。

JWT使用场景

Authentication(鉴权)这是使用JWT最常见的情况。 一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源。 单点登录是当今广泛使用JWT的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。

Information Exchange(信息交换)JSON Web Tokens是在各方之间安全传输信息的好方式。 因为JWT可以签名:例如使用公钥/私钥对,所以可以确定发件人是他们自称的人。 此外,由于使用标头和有效载荷计算签名,因此您还可以验证内容是否未被篡改。

以上就是 JSON Web Token 相关知识,希望这篇文章对您的学习或者工作有所帮助,如果您觉得文章有帮助,欢迎帮忙转发,谢谢。

java json web token_一分钟简单了解JSON Web Token相关推荐

  1. java跨域解析json数据_java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据...

    在开发的过程中,有时候我们需要设计一个数据接口.有时候呢,数据接口和Web服务器又不在一起,所以就有跨域访问的问题. 第一步:简单的设计一个数据接口. 数据接口,听起来高大上,其实呢就是一个简单的Se ...

  2. web前端渲染和后端渲染(web front-end and back-end rendering)

    在网上查找了很久的前端渲染和后端渲染的区别,最后总算在知乎上看到了一个比较清楚的解释,感谢万分! 作者:iakul 链接:https://www.zhihu.com/question/28725977 ...

  3. 什么是web框架?解析为什么要用web框架?

    我们常用的web前端框架其实简单称呼叫web框架,现阶段web前端技术成熟,从视觉体验到用户体验都是比较好的,这也是从简单到复杂的web前端框架技术实现的,在国内前端技术开发人员也是非常的多,市面上的 ...

  4. Java Json API:Gson使用简单入门

    GSON是Google开发的Java API,用于转换Java对象和Json对象.本文讨论并提供了使用API的简单代码示例.更多关于GSON的API可以访问:http://sites.google.c ...

  5. 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

    初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...

  6. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  7. java和web哪个难_web前端和java哪个难学?哪个简单?

    说到java很多都人都熟知,但是说到web前端可能是很多人并不知道,随着最近几年的发展,web前端开发人越来越吃香,无论是薪资待遇还是岗位的招聘数量比java差不了多少,最近有同学在咨询web前端和j ...

  8. 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析

    全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...

  9. 几分钟让你了解 WEB、UI、 JAVA!

    点击上面 免费订阅本账号! 本公众号主要推送javaweb开发相关技术,基础知识点,同时会深入剖析复杂的问题,分享一些优秀的框架,大型项目经验,当今最流行的Javaweb技术,热点科技新闻,招聘信息, ...

  10. Java的Web项目使用DWR简单配置说明

    为什么80%的码农都做不了架构师?>>>    首先使用Maven引入DWR的Jar包 <dependency><groupId>org.directwebr ...

最新文章

  1. 使用vue2.0 vue-router vuex 模拟ios7操作
  2. linux清除网卡计数
  3. mysql补充(3)优化sql语句查询常用的30种方法
  4. python学习笔记-flask学习(一)route适配器
  5. python 判断div 之间的内容是否为空_python实现单向链表数据结构及其基本方法
  6. mysql数据库存储过程及调用方法
  7. 面试官系统精讲Java源码及大厂真题 - 14 简化工作:Guava Lists Maps 实际工作运用和源码
  8. Nginx学习总结(12)——Nginx各项配置总结
  9. 上海名媛群事件是真实的么?
  10. spart快速大数据分析学习提纲(一)
  11. nvme分区选mbr还是guid_小白也会装系统 固态硬盘Win10热门主板Bios设置教程NVME和SATA...
  12. 基于FPGA的DS18B20数字温度传感器测温实例
  13. lookup无序查找_excel无序查询 使用LOOKUP函数实现无序查询
  14. 柯里化(Curry)
  15. 怎样快速找出百度云盘文件夹里分享失败文件
  16. Elasticsearch 索引
  17. IntelliJ IDEA 自动导包设置以及idea import导包顺序Java
  18. 华硕AC86U路由器最佳设置(解决5G信号断流和米家设备掉线的问题)
  19. 东华OJ进阶题47 最少拦截系统
  20. centos系统中php Curl 无法访问https 的解决办法

热门文章

  1. Android开发笔记(成长轨迹)
  2. Qt程序实现自动重启
  3. 【SpringBoot】整合MyBatis
  4. linux下安装配置nginx,Linux下安装与配置nginx
  5. python时间序列库_python Pandas库基础分析之时间序列的处理详解
  6. 查询本地内存的栈大小_JVM内存结构
  7. 软考中级软件设计师笔记第二章计算机操作系统
  8. 计算机知识提炼,2017计算机考研:操作系统复习策略及重要知识点提炼
  9. ant design vue table 高度自适应_Table行内的开关组件的使用
  10. java 正则表达式 替换 html,java 正则表达式 替换 html