jwt是什么东西?JWT的本质是什么?JWT的认证流程介绍
JWT简介
1.什么是JWT
在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程:
客户端使用用户名和密码请求登录
服务端收到请求,验证用户名和密码
验证成功后,服务端会签发一个token,再把这个token返回给客户端
客户端收到token后可以把它存储起来,比如放到cookie中
客户端每次向服务端请求资源时需要携带服务端签发的token,可以在cookie或者header中携带
服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求数据
这种基于token的认证方式相比传统的session认证方式更节约服务器资源,并且对移动端和分布式更加友好。其优点如下:
支持跨域访问:cookie是无法跨域的,而token由于没有用到cookie(前提是将token放到请求头中),所以跨域后不会存在信息丢失问题
无状态:token机制在服务端不需要存储session信息,因为token自身包含了所有登录用户的信息,所以可以减轻服务端压力
更适用CDN:可以通过内容分发网络请求服务端的所有资料
更适用于移动端:当客户端是非浏览器平台时,cookie是不被支持的,此时采用token认证方式会简单很多
无需考虑CSRF:由于不再依赖cookie,所以采用token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御
而JWT就是上述流程当中token的一种具体实现方式,其全称是JSON Web Token,官网地址://jwt.io/
通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输。JWT的认证流程如下:
首先,前端通过Web表单将自己的用户名和密码发送到后端的接口,这个过程一般是一个POST请求。建议的方式是通过SSL加密的传输(HTTPS),从而避免敏感信息被嗅探
后端核对用户名和密码成功后,将包含用户信息的数据作为JWT的Payload,将其与JWT Header分别进行Base64编码拼接后签名,形成一个JWT Token,形成的JWT Token就是一个如同lll.zzz.xxx的字符串
后端将JWT Token字符串作为登录成功的结果返回给前端。前端可以将返回的结果保存在浏览器中,退出登录时删除保存的JWT Token即可
前端在每次请求时将JWT Token放入HTTP请求头中的Authorization属性中(解决XSS和XSRF问题)
后端检查前端传过来的JWT Token,验证其有效性,比如检查签名是否正确、是否过期、token的接收方是否是自己等等
验证通过后,后端解析出JWT Token中包含的用户信息,进行其他逻辑操作(一般是根据用户信息得到权限等),返回结果
2.为什么要用JWT
2.1 传统Session认证的弊端
我们知道HTTP本身是一种无状态的协议,这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,认证通过后HTTP协议不会记录下认证后的状态,那么下一次请求时,用户还要再一次进行认证,因为根据HTTP协议,我们并不知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在用户首次登录成功后,在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这是传统的基于session认证的过程
然而,传统的session认证有如下的问题:
每个用户的登录信息都会保存到服务器的session中,随着用户的增多,服务器开销会明显增大
由于session是存在与服务器的物理内存中,所以在分布式系统中,这种方式将会失效。虽然可以将session统一保存到Redis中,但是这样做无疑增加了系统的复杂性,对于不需要redis的应用也会白白多引入一个缓存中间件
对于非浏览器的客户端、手机移动端等不适用,因为session依赖于cookie,而移动端经常没有cookie
因为session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效
前后端分离系统中更加不适用,后端部署复杂,前端发送的请求往往经过多个中间件到达后端,cookie中关于session的信息会转发多次
由于基于Cookie,而cookie无法跨域,所以session的认证也无法跨域,对单点登录不适用
2.2 JWT认证的优势
对比传统的session认证方式,JWT的优势是:
简洁:JWT Token数据量小,传输速度也很快
因为JWT Token是以JSON加密形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持
不需要在服务端保存会话信息,也就是说不依赖于cookie和session,所以没有了传统session认证的弊端,特别适用于分布式微服务
单点登录友好:使用Session进行身份认证的话,由于cookie无法跨域,难以实现单点登录。但是,使用token进行认证的话,token可以被保存在客户端的任意位置的内存中,不一定是cookie,所以不依赖cookie,不会存在这些问题
适合移动端应用:使用Session进行身份认证的话,需要保存一份信息在服务器端,而且这种方式会依赖到Cookie(需要 Cookie 保存 SessionId),所以不适合移动端
因为这些优势,目前无论单体应用还是分布式应用,都更加推荐用JWT token的方式进行用户认证
JWT结构
JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串
J W T S t r i n g = B a s e 64 ( H e a d e r ) . B a s e 64 ( P a y l o a d ) . H M A C S H A 256 ( b a s e 64 U r l E n c o d e ( h e a d e r ) + " . " + b a s e 64 U r l E n c o d e ( p a y l o a d ) , s e c r e t ) JWTString = Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)JWTString=Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
1.Header
JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存
2.Payload
有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。 JWT指定七个默认字段供选择
这些预定义的字段并不要求强制使用。除以上默认字段外,我们还可以自定义私有字段,一般会把包含用户信息的数据放到payload中,如下例:
3.Signature
签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名
H M A C S H A 256 ( b a s e 64 U r l E n c o d e ( h e a d e r ) + " . " + b a s e 64 U r l E n c o d e ( p a y l o a d ) , s e c r e t ) HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)
JWT的种类
其实JWT(JSON Web Token)指的是一种规范,这种规范允许我们使用JWT在两个组织之间传递安全可靠的信息,JWT的具体实现可以分为以下几种:
nonsecure JWT:未经过签名,不安全的JWT
JWS:经过签名的JWT
JWE:payload部分经过加密的JWT
1.nonsecure JWT
未经过签名,不安全的JWT。其header部分没有指定签名算法
并且也没有Signature部分
2.JWS
JWS ,也就是JWT Signature,其结构就是在之前nonsecure JWT的基础上,在头部声明签名算法,并在最后添加上签名。创建签名,是保证jwt不能被他人随意篡改。我们通常使用的JWT一般都是JWS
为了完成签名,除了用到header信息和payload信息外,还需要算法的密钥,也就是secretKey。加密的算法一般有2类:
对称加密:secretKey指加密密钥,可以生成签名与验签
非对称加密:secretKey指私钥,只用来生成签名,不能用来验签(验签用的是公钥)
JWT的密钥或者密钥对,一般统一称为JSON Web Key,也就是JWK
到目前为止,jwt的签名算法有三种:
HMAC【哈希消息验证码(对称)】:HS256/HS384/HS512
RSASSA【RSA签名算法(非对称)】(RS256/RS384/RS512)
ECDSA【椭圆曲线数据签名算法(非对称)】(ES256/ES384/ES512)
Java中使用JWT
官网推荐了6个Java使用JWT的开源库,其中比较推荐使用的是java-jwt和jjwt-root
1.java-jwt
1.1 对称签名
首先引入依赖
生成JWT的token
解析JWT字符串
运行后发现报异常,原因是之前生成的token已经过期
再运行一次生成token的方法,然后在过期时间10秒之内将生成的字符串拷贝到解析方法中,运行解析方法即可成功
我们可以将上述方法封装成工具类
1.2 非对称签名
生成jwt串的时候需要指定私钥,解析jwt串的时候需要指定公钥
2.jjwt-root
2.1 对称签名
引入依赖
2.2 非对称签名
生成jwt串的时候需要指定私钥,解析jwt串的时候需要指定公钥
实际开发中的应用
在实际的SpringBoot项目中,一般我们可以用如下流程做登录:
在登录验证通过后,给用户生成一个对应的随机token(注意这个token不是指jwt,可以用uuid等算法生成),然后将这个token作为key的一部分,用户信息作为value存入Redis,并设置过期时间,这个过期时间就是登录失效的时间
将第1步中生成的随机token作为JWT的payload生成JWT字符串返回给前端
前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串
后端定义一个拦截器,每次收到前端请求时,都先从请求头中的Authorization字段中取出JWT字符串并进行验证,验证通过后解析出payload中的随机token,然后再用这个随机token得到key,从Redis中获取用户信息,如果能获取到就说明用户已经登录
图片
- 2022年全国赛艇锦标赛在浙江 河北省三部电视剧获第31届中 今年1至9月河北省电子信息产
- 衡水谋划了32个特色果蔬单品 河北省打出资金和政策“组合 全国219个城市被授予“国家 河北湿地公园数量有了跨越式 粤港澳大湾区的中欧班列开行 中国空军“八一”飞行表演队
- 2022年第22号台风“尼格”已 中国空间站迎来重大时刻 空 粤支持韶关建设国家老工业城 清远清城区全新打造的校外未 广州年内将在南沙各镇街布局 广东获第二十三届中国专利奖
- 河北邢台出台20条措施 努力 河北高邑指导企业挖掘传统文 石家庄一90后志愿者成功捐献 前三季度石家庄规上工业高新 江西资溪“两山转化中心”推 畅通道兴贸易 广州海关关区
精彩推送
- jwt是什么东西?JWT的本质是什么?JWT的认证流程介绍
- java下载途径有哪些?Java的官网下载链接一览 java17下载安装教程
- 设计模式分为几类?工厂类设计模式的代码是什么?
- flex布局是什么意思通俗解释 flex布局中的一些基本概念介绍
- UML模型图的构成有哪些?5类UML图的分类法 UML相关概述介绍
- 中小学生如何学习Python编程 python基础教程初学者指南一览
- Git下载路径是什么?Git安装组件有哪些?
- 环球今日报丨打通动力电池回收关键堵点
- 大树科技携手云采科技,助力政府公共资源交易数字化产融建设
- 宁德时代加入“天价锂矿”争夺战 斯诺威控制权归属扑朔迷离:独家
- 大树科技五周年暨3.0战略发布会圆满举行
- 保障锂电产业链协同稳定:全球新动态
- 今日申购:聚和材料
- 抖音月付怎么套出来?常用办法交给你
- 美股纳指跌0.59% B站涨22%雾芯科技满帮涨12%|实时
- 上交所退市新规是什么 重大违法退市标准是怎样的
- 车贷怎么算?车贷计算公式和还款方式盘点
- 上证指数是什么意思通俗解释 上证指数计算方法介绍
- 毛利润是什么意思?毛利润怎么算?毛利润越高反映什么?
- 支付宝提现要手续费吗贵不贵?支付宝提现收取手续费的情况介绍
- 香港股市交易时间与A股有哪些不同 港股通交易规则介绍
- 大额存单流动性怎么样 不建议你买大额存单的主要原因有这些
- 手机银行可以交医疗保险吗 医疗保险网上怎么缴费流程是怎样的
- 哪些情况个股会被st?st股票是什么意思风险性大不大?
- 股票缩量上涨意味着什么 股票出现量价背离怎么办
- 环球快资讯:天地壹号净利润与现金流背离 去年9亿理财为何仍募资
- 益世科生物去年净利升背离现金流 近三年掏空式分红
- 合盛硅业:股东富达实业拟减持不超过6444.99万股_世界微动态
- 环球报道:纵目科技营收连升应收账款高 三年一期连亏拟募资20亿
- 秦岭生物多样性 实现恢复性增长
- 动态:广西荔浦花篢镇:工作站成农户致富增收“加油站”
- 世界微资讯!陕西黄河湿地 40多万只候鸟在此栖息越冬
- 每日热议!大秦铁路:董事长包楚雄辞职
- 生态旅游:南昌市湾里管理局全力打造高颜值生态旅游区-天天快看点
- 顾客认为“没切干净” 杭州格莱美医美提到“并发症”
- 花2900元在实体店买的老板燃气灶无法安装 为何遭遇退货难?
- 每日信息:男子充话费发现名下多了两张副卡 联系联通公司后又莫名被取消?
- 全球今热点:“七万多的物品就这么丢了?”男子傻眼 韵达快递:没保价只能赔一千
- 女子花800元在高鑫医美打水光针后 皮肤越来越干还起皱_当前看点
- 生物医药板块涨2.62% 义翘神州涨14.15%居首
- 存燃油泄漏安全隐患 1843辆东风雪铁龙凡尔赛C5 X被召回_每日动态
- 中天美好摇号竞得杭州1宗住宅用地 溢价率11.3%
- 环球新动态:万达商管60亿元公司债券已获上交所受理
- 【世界独家】中电建路桥13.05亿元应收账款资产支持ABS已获受理
- 半导体板块涨1.46% 铜峰电子涨10.05%居首|环球新要闻
- 【聚看点】华电国际龙虎榜:机构净卖出1.72亿元
- 副驾座椅存安全隐患 日产召回10465辆进口英菲尼迪Q50、Q60、QX60汽车_世界通讯
- 环球最资讯丨锂电池板块涨1.04% 胜利精密涨10.04%居首
- 朝阳3宗压轴出场 北京第四批集中供地收官
- 奔驰召回超16万问题车辆 涉及进口GLE SUV、GLS SUV及国产C级汽车
- 滨江新城20亿元公司债券已获上交所受理
- 证券板块涨3.6% 华西证券涨10.01%居首
- 雄安宣武医院(新区投资部分)项目主体结构全面封顶-快看点
- 世界简讯:房地产开发板块涨7.07% 嘉凯城涨10.21%居首
- 【天天快播报】国联安中证1000指数增强型证券投资基金延长募集期
- 湖南首条智慧高速平益高速公路全线通车
- 惠升基金6只基金增聘基金经理曾华 报道
- 焦点快播:碳中和板块涨1.54% 国立科技涨11.03%居首
- 大连高新区锻造高质量发展“人才引擎”
- 罗普特前三季净利降200% 去年“上市即巅峰”募9亿|全球微资讯
- 郑州第三批集中供地成交20宗地块,总成交金额114.83亿元_全球热文
- 中海新城以28.4亿元竞得北京石景山1宗地块|当前聚焦
- 大流量!多客源!好经营!水澜之迷为创业者实现高额盈利!
- 收评:三大指数全天强势反弹 沪指重返3100点上方 环球视讯
- 世界微动态丨倍轻松前三季净利降187% 上市即巅峰安信证券保荐
- 滨江集团9.8亿元竞得杭州萧山1宗地块_动态
- 云里物里北交所上市首日跌1.5% 申万宏源保荐_世界实时
- 安信证券及2保代被监管警示 保荐野风药业履职不到位 天天热门
- 1宗地块底价成交,北京第四批集中供地剩余5宗地块29日现场竞价
- 新世界房地产2.54亿元竞得杭州萧山1宗地块_环球热推荐
- 金隅以32.315亿元+3.5万平现房销售面积竞得北京朝阳崔各庄1宗地块
- 北京现代ix35发生交通事故 副驾安全气囊未弹出致乘客身亡
- 品高股份前3季亏损 上市即巅峰超募3.5亿民生证券保荐
- 启辰大V车辆导航出现死机 车主投诉后已顺利解决
- 发改委等五部门:支持生活垃圾焚烧处理项目发行REITs
- 展非遗文化 谱蹴鞠新韵 《中国蹴鞠谱》复活系列藏品上线十八数藏
- 善泰健康开展肠道菌群个性化治疗 成功降低结直肠癌患病风险
- 共谋创新合作 赋能产业发展 杭州数字经济产业旅游国际对话大会成功举办
- 大树科技推动产业链融合 科技赋能实体经济
- 大树科技入选“甬金通”揭榜挂帅第一批项目清单
- 老赖是什么意思?老赖只要挺过2年就没事了是真的假的?
- 百万医疗险是什么意思啊 百万医疗险赔偿范围包括哪些
- 10万元利息收益是多少 银行存款利息计算公式一览
- 股市交易时间段是哪几天 创业板盘后定价交易是什么
- RCEP是什么意思有几个成员国 RCEP涵盖区域包括哪些
- 社保卡里面的钱到底能不能取出来 社保金的领取条件介绍
- 美联储什么时候加息目的是什么 美联储加息时间表一览
- reits基金有哪些国内 基础设施基金涨跌幅限制价格计算公式一览
- 净利润增长率怎么算?股票净利润增长率怎么查询?
- 医保怎么交费更方便?医保缴费方式有哪几种?
- 开护肤品店认准嘉柏俪,强悍实力铸就创业奇迹
- 天天即时:今日上市:云里物里
- 今日申购:晶品特装、长盈通、美腾科技、欧普泰、绿亨科技 天天观速讯
- 当前滚动:奔驰E300L内饰开裂 车主投诉后48小时内快速解决
- 零配件供应延迟 理想L9、L8部分车型延期交付
- 天天快资讯丨纳指跌1.58% 拼多多涨12.6%爱奇艺涨9%云集跌13.9%
- 同比增长0.8% 1-10月汽车制造业利润总额由降转升
- 环球短讯!敢谈标配的德系SUV-全新探岳家族焕新而至
- 全球观天下!湘财股份实控人控制的新湖集团拟减持不超5710万股
- 华电新能业绩连升去年关联采购59亿 面临补贴退坡趋势
金融
财经
要闻
公司
吉卜力工作室如今已加入到主题公园的浪潮,并于11月1日正式对公众开放全球首个项目,将《龙猫》等经典作品的场景复原至现实世界。对于吉卜
详细>>随着在线旅游企业数量的不断增多,售卖不合理低价旅游产品、违规利用用户个人信息等问题也时有发生。11月1日,文旅部发布《文化和旅游部关
详细>>两个小时,这是越南全国首票榴莲从装车到运送至我国广西崇左友谊关口岸的时间。得益于一体化供应链,2021年,中国与越南进出口贸易额达到23
详细>>11月1日,北京商报记者梳理发现,截至9月末,10家A股上市农商行资产规模均有所扩大,重庆农商行、上海农商行仍以万亿元总资产位居前列。营
详细>>西贝餐饮集团(以下简称西贝)在儿童餐的道路上越走越深。11月1日,北京商报记者从西贝获悉,其将推出西贝儿童餐零售产品。目前,部分西贝门
详细>>新一期麻辣粉和逆回购操作如期公布。9月15日,央行发布消息称,为维护银行体系流动性合理充裕,开展4000亿元中期借贷便利(MLF)操作和20亿元
详细>>