java json web token_一分钟简单了解JSON Web Token
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相关推荐
- java跨域解析json数据_java后台设计简单的json数据接口,设置可跨域访问,前端ajax获取json数据...
在开发的过程中,有时候我们需要设计一个数据接口.有时候呢,数据接口和Web服务器又不在一起,所以就有跨域访问的问题. 第一步:简单的设计一个数据接口. 数据接口,听起来高大上,其实呢就是一个简单的Se ...
- web前端渲染和后端渲染(web front-end and back-end rendering)
在网上查找了很久的前端渲染和后端渲染的区别,最后总算在知乎上看到了一个比较清楚的解释,感谢万分! 作者:iakul 链接:https://www.zhihu.com/question/28725977 ...
- 什么是web框架?解析为什么要用web框架?
我们常用的web前端框架其实简单称呼叫web框架,现阶段web前端技术成熟,从视觉体验到用户体验都是比较好的,这也是从简单到复杂的web前端框架技术实现的,在国内前端技术开发人员也是非常的多,市面上的 ...
- Java Json API:Gson使用简单入门
GSON是Google开发的Java API,用于转换Java对象和Json对象.本文讨论并提供了使用API的简单代码示例.更多关于GSON的API可以访问:http://sites.google.c ...
- 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图
初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...
- 《Java Web开发入门很简单》学习笔记
<Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...
- java和web哪个难_web前端和java哪个难学?哪个简单?
说到java很多都人都熟知,但是说到web前端可能是很多人并不知道,随着最近几年的发展,web前端开发人越来越吃香,无论是薪资待遇还是岗位的招聘数量比java差不了多少,最近有同学在咨询web前端和j ...
- 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析
全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...
- 几分钟让你了解 WEB、UI、 JAVA!
点击上面 免费订阅本账号! 本公众号主要推送javaweb开发相关技术,基础知识点,同时会深入剖析复杂的问题,分享一些优秀的框架,大型项目经验,当今最流行的Javaweb技术,热点科技新闻,招聘信息, ...
- Java的Web项目使用DWR简单配置说明
为什么80%的码农都做不了架构师?>>> 首先使用Maven引入DWR的Jar包 <dependency><groupId>org.directwebr ...
最新文章
- 使用vue2.0 vue-router vuex 模拟ios7操作
- linux清除网卡计数
- mysql补充(3)优化sql语句查询常用的30种方法
- python学习笔记-flask学习(一)route适配器
- python 判断div 之间的内容是否为空_python实现单向链表数据结构及其基本方法
- mysql数据库存储过程及调用方法
- 面试官系统精讲Java源码及大厂真题 - 14 简化工作:Guava Lists Maps 实际工作运用和源码
- Nginx学习总结(12)——Nginx各项配置总结
- 上海名媛群事件是真实的么?
- spart快速大数据分析学习提纲(一)
- nvme分区选mbr还是guid_小白也会装系统 固态硬盘Win10热门主板Bios设置教程NVME和SATA...
- 基于FPGA的DS18B20数字温度传感器测温实例
- lookup无序查找_excel无序查询 使用LOOKUP函数实现无序查询
- 柯里化(Curry)
- 怎样快速找出百度云盘文件夹里分享失败文件
- Elasticsearch 索引
- IntelliJ IDEA 自动导包设置以及idea import导包顺序Java
- 华硕AC86U路由器最佳设置(解决5G信号断流和米家设备掉线的问题)
- 东华OJ进阶题47 最少拦截系统
- centos系统中php Curl 无法访问https 的解决办法
热门文章
- Android开发笔记(成长轨迹)
- Qt程序实现自动重启
- 【SpringBoot】整合MyBatis
- linux下安装配置nginx,Linux下安装与配置nginx
- python时间序列库_python Pandas库基础分析之时间序列的处理详解
- 查询本地内存的栈大小_JVM内存结构
- 软考中级软件设计师笔记第二章计算机操作系统
- 计算机知识提炼,2017计算机考研:操作系统复习策略及重要知识点提炼
- ant design vue table 高度自适应_Table行内的开关组件的使用
- java 正则表达式 替换 html,java 正则表达式 替换 html