什么是JWT?原理是什么?
什么是JWT
JWT 是Json Web Tokens的简称。用百度上面的解释讲,是目前流行的跨域认证解决方案,一种基于JSON的、用于在网络上声明某种主张的令牌(token)。
JTW原理
jwt验证方式是将用户信息通过加密生成token,每次请求服务端只需要使用保存的密钥验证token的正确性,不用再保存任何session数据了,进而服务端变得无状态,容易实现拓展。

比如加密前的信息:
{
"username": "vist",
"role": "admin",
"expire": "2020-11-06 15:14:20"
}
加密后:
6gdfg7af816b907f2cc9acbe9c3b4625
JWT 结构

三部分用“.”隔开。如下
edsfdfsdffdssdfR5cCI6IkpXVCJ9.ekgjfdsdfgrMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Sfdsgdfgsdfgf36POk6yJVfgsd4treh5hdfs
头部
头部通常由令牌的类型(typ)和签名的算法(alg)组成。一般使用base64编码。
{
"typ": "JWT",
"alg": "HS256"
}
这里有个点可以说一下,这个typ类型是媒介类型(Media Type),可以认为是媒介类型、介质类型、设备类型等等都可以,用户可以根据令牌类型做不同的操作。举个例子有个项目是移动端端和PC端。那么这里就可以设置typ为移动或PC的。
载荷
载荷是数据的主体部分。一般使用base64编码。
可以使用JWT官方推荐字段:
iss: 签发者
sub: 主题
aud: 接收者
exp(expires): 过期时间
iat(issued at): 签发时间
nbf(not before): 早于某个时间不处理
jti(JWT ID): 唯一标识
也可以使用自定义字段
{
"username": "vist",
"role": "admin"
}
主体部分可添加非敏感数据
这里就有个问题了,那什么是敏感数据。例如:用户的余额、用户的密码、用户的隐私数据(女性的年龄)等等都可以是敏感的数据。而非敏感数据则是你可以公开出去的数据。
{
"iss": "我是大哥",
"sub": "审批",
"aud": "牛逼",
"userName": "大哥大",
"approve":"通过",
"iat":"1597000000",
"exp": 1597223455
}
签名
签名部分是对前两部分(头部,载荷)的签名,防止数据篡改。
按下列步骤生成:
1、先指定密钥(secret)
2、把头部(header)和载荷(payload)信息分别base64转换
3、使用头部(header)指定的算法加密
最终:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), "密钥/盐");
通过算法加密后的结果就是签名。
头部和载荷都用base64编码不怕被解码获取吗?
其实不用担心。因为头部和载荷的信息都是非敏感信息,可以公开的,即使拿到token,也只能解析出非敏感的数据,并不能拿到敏感数据。
同时篡改头部或者载荷的数据是不可能通过校验的。
因为检验token的时候会将【头部.载荷】进行加密然后和签名比较。而签名是由 [头部数据.载荷数据]经过算法加密生成的。也就是说,篡改了就无法通过校验了。
JWT特点总结
JWT更加简洁,更适合在HTML和HTTP环境中传递。,但更建议JWT建议使用HTTPS协议来传输代码。
JWT适合一次性验证,如:激活邮件
JWT适合无状态认证
JWT适合服务端CDN分发内容
相对于数据库Session查询更加省时
跨域认证需要做Session共享,而使用了JWT则不需要。因为只要其他服务器只要是使用同一套算法,就可以做信息的校验。
JWT默认不加密
使用期间不可取消令牌或更改令牌的权限
什么是JWT?原理是什么?的更多相关文章
- JWT原理和使用
jwt JSON Web Tokens,是一种开发的行业标准RFC 7519,用于安全的表示双方之间的声明.目前,jwt广泛的用在系统的用户认证方面,特别是前后端分离项目. 1.jwt认证流程 在项目 ...
- JWT原理
1.COOKIE使用和优缺点 https://www.cnblogs.com/xiaonq/p/11094480.html 1.1 cookie原理: 用户名+密码 cookie是保存在用户浏览器 ...
- JWT原理及常见攻击方式
JWT的全称是Json Web Token.它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份. ...
- JWT原理实现代码
JWT学习文章: 第一篇:JWT原理 第二篇:JWT原理实现代码 上一篇学习了JWT的基本理论,这一篇将根据原理进行代码实现. 要想实现jwt的加密解密,要先生成一个SecurityKey,大家可以在 ...
- 05: jwt原理&使用
1.1 COOKIE使用和优缺点 参考博客:https://baijiahao.baidu.com/s?id=1608021814182894637&wfr=spider&for= ...
- JWT 原理
1.COOKIE使用和优缺点 参考博客:https://baijiahao.baidu.com/s?id=1608021814182894637&wfr=spider&for=pc 用 ...
- JWT原理及实现
wt(JSON Web Tokens),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目. 1. jwt认证流 ...
- JWT原理 使用(入门篇)
1.JWT简介 JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换 使用起来就是,由 ...
- JWT认证原理及使用
一.JWT原理: 参考文章:https://www.jianshu.com/p/180a870a308a 1.传统的登录方式: 浏览器输入用户名密码,服务端校验通过,根据用户信息生成一个token,将 ...
- jwt的原理以及使用
jwt原理(json web token) 我们之前是使用session实现登录,通过实际密码+盐组成字符串进行md5存入redis或者数据库中,输入的密码与实际校验通过,发送给客户端一个有效时间的t ...
随机推荐
- CMD(命令提示符)的基本操作(文件夹)
打开CMD窗口,接下来将介绍如何使用CMD来创建.删除.修改.查看文件夹(目录) ps:以下所有文件夹将统一写成目录 1.1 使用CMD创建空目录(为了更好的演示,本文皆以D盘为当前路径),命令如下: ...
- HDFS 03 - 你能说说 HDFS 的写入和读取过程吗?
目录 1 - HDFS 文件的写入 1.1 写入过程 1.2 写入异常时的处理 1.3 写入的一致性 2 - HDFS 文件的读取 2.1 读取过程 2.2 读取异常时的处理 版权声明 1 - HDF ...
- POJ-2253(最短路变形+dijikstra算法+求解所有路径中所有最长边中的一个最小值)
frogger POJ-2253 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像. 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离. #include<io ...
- 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高性能产品
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内Cortex-M内核MCU厂商高性能产品. 在8/16位中低端MCU领域,国内厂商的本土化产品设计以及超低价特点,使得其与国外大厂竞 ...
- Python——input与raw_input的区别
区别一: raw_input():python2版本 input():python3版本 区别二: raw_input()不管是输数字还是字符串,结果都会以字符串的形式展现出来 input()则是 ...
- python3 获取博彩网站页面下所有域名(批量)
已有的域名信息 详细实现过程如下 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests from bs4 import Beauti ...
- docker 部署mysql服务之后,执行sql脚本
1,先将.sql文件copy到docker容器里 docker ps //找到容器的短ID或者指定的name. docker inspect -f '{{.Id}}' id or name 得到指定 ...
- lucent,solr,ES比较
|0什么是全文搜索 什么是全文搜索引擎? 百度百科中的定义:全文搜索引擎是目前广泛应用的主流搜索引擎.它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现 ...
- 你真的懂 i++ 和 ++i 吗?
对于 ++i 和 i++,许多人可能都知道,不就是先加1再取值,和先取值再加1嘛.然而,真的是这样吗?请先看以下4道题,能全部答对可以忽略这篇文章. 题目 // 示例1 int i = 1; i = ...
- Python基础之异常定义
技术背景 在各类python的项目中,总会涉及到项目自身相关的一些约束条件.这些约束条件体现在,当用户输入的参数或者文件不符合项目要求时,就拒绝这个参数的输入并且播报出来,提醒用户自行修改,而这一过程 ...