JWT结果功能用处简单介绍
JWT
Json Web Token
1、JWT长什么样?
JWT是由三段信息构成的,将这三段信息文本用.
链接一起就构成了Jwt字符串。就像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
2、JWT的构成
第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
1.header
jwt的头部承载两部分信息:
- 声明类型,这里是jwt
- 声明加密的算法 通常直接使用 HMAC SHA256
完整的头部就像下面这样的JSON:
{'typ': 'JWT','alg': 'HS256'
}
然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
2.playload
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
- 标准中注册的声明
- 公共的声明
- 私有的声明
标准中注册的声明 (建议但不强制使用) :
- iss: jwt签发者
- sub: jwt所面向的用户
- aud: 接收jwt的一方
- exp: jwt的过期时间,这个过期时间必须要大于签发时间
- nbf: 定义在什么时间之前,该jwt都是不可用的.
- iat: jwt的签发时间
- jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明 :
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
定义一个payload:
{"sub": "1234567890","name": "John Doe","admin": true
}
然后将其进行base64加密,得到Jwt的第二部分。
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
3.signature
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:
- header (base64后的)
- payload (base64后的)
- secret
这个部分需要base64加密后的header和base64加密后的payload使用.
连接组成的字符串,然后通过header中声明的加密方式进行加盐secret
组合加密,然后就构成了jwt的第三部分。
// javascript
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);var signature = HMACSHA256(encodedString, 'secret'); // TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
将这三部分用.
连接成一个完整的字符串,构成了最终的jwt:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。
3、使用流程
流程说明: 1,浏览器发起请求登陆,携带用户名和密码; 2,服务端验证身份,根据算法,将用户标识符打包生成 token, 3,服务器返回JWT信息给浏览器,JWT不包含敏感信息; 4,浏览器发起请求获取用户资料,把刚刚拿到的 token一起发送给服务器; 5,服务器发现数据中有 token,验明正身; 6,服务器返回该用户的用户资料;
4、JWT的6个优缺点
1、JWT默认不加密,但可以加密。生成原始令牌后,可以使用改令牌再次对其进行加密。
2、当JWT未加密方法是,一些私密数据无法通过JWT传输。
3、JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。
4、JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。
5、JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。
6、为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。
参考:
什么是 JWT – JSON WEB TOKEN - 简书 (jianshu.com)
JWT结果功能用处简单介绍相关推荐
- Zemax学习笔记(1)- 界面与功能的简单介绍
Zemax学习笔记(1)- 界面与功能的简单介绍 OpticStudio入门-第1部分 界面与功能的简单介绍 OpticStudio入门-第1部分 获取Zemax 2019可以在在淘宝上购买,商家会给 ...
- 浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- chrome修改js数据怎么生效_chrome浏览器中 F12 功能的简单介绍
首先介绍Chrome开发者工具中,调试时使用最多的三个功能页面是:元素(ELements).控制台(Console).源代码(Sources),此外还有网络(Network)等. 元素(Element ...
- STM32F1关于SDIO功能的简单介绍
主要参考:STM32F10xxx参考手册V10.SD卡2.0协议 注:本篇文章所引用图如未标注则是采用<STM32中文参考手册V10>.<STM32英文参考手册V15>,如表标 ...
- Android开发之--(WIFI,蓝牙,电池,背光,SD卡,摄像头,按键,MIC,重力感应等)功能的简单使用
1.WIFI(打开,关闭,使能,扫描等) 2.蓝牙(打开关闭) 3.电池(获取电池的各种参数和状态信息) 4.背光(背光调节) 5.U盘/SDcard(判断是否插入,读取等) 6.屏幕校准(准确的说是 ...
- 微信公众平台接口简单介绍
微信公众平台的管理地址是:https://mp.weixin.qq.com 注册完个人公众号以后,登录到微信公众平台的管理后台,需要用微信扫一下二维码才能登录进去哦... 这个后台提供了基本的对公众号 ...
- chrome浏览器中F12的简单介绍
Chrome开发者工具中主要使用的四个功能页面: 元素(Elements).控制台(Console).源代码(Sources).网络(Network) 1.元素(Elements) 用于查看或修改HT ...
- 【修真院小课堂】JWT简单介绍
JWT简单介绍 小课堂 罗佳超 <section> <p>1.背景介绍</p> ...
- 从零开始开发Android相机app(三)简单介绍图像滤镜功能
目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...
- USB简单介绍USB共享网络功能(一)
一.USB的简单介绍&USB共享网络功能 USB是比较常用接口类型, 也是PC的标配, 通常外设通过USB口连接至PC 在USB的世界里, 分USB Host和USB Device两种角色 P ...
最新文章
- CentOS 6和CentOS 7管理系统服务的区别
- 关于LUA+Unity开发_toLua篇【二】
- css overflow和border-radius一起用 解决圆角和滚动条一起用的问题
- Linux文件系统只读Read-only file system
- 进程间通信——共享内存(CreateFileMapping+MapViewOfFile)
- 手写实现Spring(IOC、DI),SpringMVC基础功能
- js中的bool值转换及 、||、 !!详解
- 【JS 逆向百例】某易支付密码 MD5+AES 加密分析
- asp.net使用httpModule来实现一个反向代理
- python系列九:python3迭代器和生成器
- 《计算机网络 自顶向下方法》(第7版)答案(第九章)
- 系统封装到底有个什么用
- UML-包图中包与包之间的关系
- StringBuilder
- String的intern方法
- 认证资料大全(十三)------ Juniper Networks认证列表
- 药物优化中的Oracle什么意思?评价指标(Metrics)是什么?
- 给定一个由N个非负整数构成的序列,我们来定义一下序列的中位数,如果N是奇数,在对序列排序后,中位数就是最中间的那个数,即排序后,中位数的位置为(N+1)/2,这里序列的位置从1开始。如果N是偶数,则中
- Linux各个发行版本代号整理
- android 调用相机并获取图片地址,Android 7.0使用FileProvider获取相机拍照的图片路径...
热门文章
- 编程猫李天驰:让编程教育回归互联网
- SpringCloudAlibaba之Nacos
- 台式计算机主板电池型号,台式机主板电池没电会怎么样 主板电池怎么换
- 课工场论坛列表发帖制作
- 模乘与Montgomery 模乘
- 你想要的宏基因组-微生物组知识全在这(19国庆特别篇)
- python数据分析实例-python数据分析-11数据分析实战案例
- 看了本文让你laravel安装laravel-queue-rabbitmq一路顺风
- gcc10环境下bwa安装报错的解决方案
- java 日程日历_java编程:我要做一个提醒日程的软件,不是要用到日历和时钟么,这要不要自己编,还是可以直接同步电脑上...