什么是JWT

全称为JSON web token,是一个json对象,用于系统间身份验证。主要包括三部分组成:

[header].[payload].[signature]

上面三部分用.分割。我们来看每一部分的具体内容:

header部分

header部分用于描述签名的算法,也可以包括content type。是一个json对象,并且用BASE64处理。一个简单的header例子如下:

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

typ字段告诉我们类型是jwt类型,alg告诉我们算法是HS256。除了HS256,还有RS256,都是两个常用的签名算法。

也可以不用任何签名算法,加密算法,此时alg字段为none,也是支持的,无非不安全。

Payload部分

payload部分是用户数据真实存储的地方,这个部分的信息建议不要存放私密信息,因为是任何人都可以读取的。一般包括用户信息,以JSON的形式表示,同样的,也是

BASE64处理后的。一个简单的例子如下:

 {"userId":"b07f85be-45da","iss": "https://provider.domain.com/","sub": "auth/some-hash-here","exp": 153452683}

userId:用户id

iss:发行者

sub:代表内容

exp:失效时间

签名

签名是jwt的第三部分,主要是验证json的有效性。服务端接收的jwt里面,前两部分是base64处理过的header和payload,签名是利用header中定义的secret key和算法生成签名。

HASHINGALGO( base64UrlEncode(header) + “.” + base64UrlEncode(payload),secret)

举个例子:

header:{"alg" : "HS256","typ" : "JWT"
}Payload:{"id" : 123456789,"name" : "Joseph"
}Secret: kerry111

生成的jwt如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzNDU2Nzg5LCJuYW1lIjoiSm9zZXBoIn0.OpOSSw7e485LOP5PrzScxHb7SR6sAOMRckfFwi4rp7o

认证流程

JWT 认证流程:

  • 用户输入用户名/密码登录,服务端认证成功后,会返回给客户端一个 JWT

  • 客户端将 token 保存到本地(通常使用 localstorage,也可以使用 cookie)

  • 当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用Bearer 模式添加 JWT,其内容看起来是下面这样

Authorization: Bearer <token>
  • 服务端的保护路由将会检查请求头 Authorization 中的 JWT 信息,如果合法,则允许用户的行为

  • 因为 JWT 是自包含的(内部包含了一些会话信息),因此减少了需要查询数据库的需要

  • 因为 JWT 并不使用 Cookie 的,所以你可以使用任何域名提供你的 API 服务而不需要担心跨域资源共享问题(CORS)

  • 因为用户的状态不再存储在服务端的内存中,所以这是一种无状态的认证机制

安全性

  • 利用secret key判断来源是否合法,是否有效
  • 利用签名判断消息体是否被更改
  • 客户端需要保存token,为了防止XSS攻击,需要设置httponly  cookie
  • 不要把jwt用于session token,利用服务端session,更加有效,而且不容易泄露数据
  • 必须使用https传输,oauth也是

与OAuth2的区别

OAUTH2.0是一种授权方式,一种流程规范。比如说你要访问某个论坛,但是你不想重新注册,你想用QQ号登陆!(需要论坛先在QQ开放平台注册),那么你登录的时候,选择QQ,它就会跳转到QQ的登录页面,你登录完,再跳转到论坛。论坛就会获取QQ给的授权信息。我这里只是简单说一下流程,具体会复杂很多。

JWT,是TOKEN的一种形式,TOKEN说简单了,就是一个秘钥(随机数)。以往的TOKEN,你拿到之后要获取 用户信息,需要再去数据库匹配查询,而JWT干脆将用户信息存储在了TOKEN里,你解析就可以获得。

所以,两者根本就不是一种东西。

  • JWT让客户端保存用户信息,但是不能包含敏感信息,防止泄露
  • JWT便于扩展,在分布式系统中,服务之间进行api调用
  • Oauth是一整套授权认证流程,包括权限,角色,资源设置等,

与token区别

  • Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库或者缓存,获取用户信息,然后验证 Token 是否有效。

  • JWT:将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

  • 因为 JWT 并不依赖 Cookie 的,所以你可以使用任何域名提供你的 API 服务而不需要担心跨域资源共享问题(CORS)

  • JWT 最大的优势是服务器不再需要存储 Session,使得服务器认证鉴权业务可以方便扩展。但这也是 JWT 最大的缺点:由于服务器不需要存储 Session 状态,因此使用过程中无法废弃某个 Token 或者更改 Token 的权限。也就是说一旦 JWT 签发了,到期之前就会始终有效,除非服务器部署额外的逻辑。

  • JWT 适合一次性的命令认证,颁发一个有效期极短的 JWT,即使暴露了危险也很小,由于每次操作都会生成新的 JWT,因此也没必要保存 JWT,真正实现无状态。

一句话:JWT是客户端自说明的,服务端无状态化,并且不需要查询请求相关的用户信息,都包含在jwt的payload里面。

参考链接:https://www.jianshu.com/p/0fd92ccc055e

到底什么是JWT技术?相关推荐

  1. 【转】我们到底为了什么钻研技术?

    我们到底为了什么钻研技术?         在努力工作.学习了5年之后,1-2-3最近突然感觉有些迷茫:我们钻研技术到底是为了什么?作技术能走多远?1-2-3写下了自己的一些感想,也期待着你的精彩留言 ...

  2. 腾讯T9级到底需要什么样的技术水平?我们又该如何学习?

    每一个程序员应该都想着如何快速提升自己(反正我是这样想的),从程序员进阶到架构师再到技术专家再到CTO .当然这其中需要大量的知识储备,是一个不断学习的过程,话不多说下面我直接上图,一起来看看腾讯T9 ...

  3. 使用jwt技术实现系统间的单点登录

    单点登录(single sign on),简称sso.它的定义是多个应用系统间,只需要登录一次就可以访问所有相互信任的应用系统.下面介绍用jwt技术如何来实现单点登录. 一.JWT定义及其组成 JWT ...

  4. 李开复口中的“联邦学习” 到底是什么?| 技术头条

    近日,在百大人物峰会上,创新工场创始人李开复谈及数据隐私保护和监管问题时,表示:"人们不应该只将人工智能带来的隐私问题视为一个监管问题,可尝试用'以子之矛攻己之盾'--用更好的技术解决技术带 ...

  5. 边缘计算架构_边缘计算到底是个什么技术?边缘计算硬件架构

    对物联网IoT技术感兴趣的朋友在这两年一定经常可以看到"边缘计算"这个名词,但是总感觉不明白到底什么是"边缘计算",不明觉厉的感觉.让我们看看业界泰斗Intel ...

  6. 大数据到底是不是“算命”?技术大牛们这样说

    TBO(旅游商业观察):"如果你只有一堆人的电话号码,这可能没多大意义.但像携程的数据,比如所有人提前预订.搜索.浏览.点评的信息等,这就是有价值的.但更深层的核心是,你能不能在某个产品上使 ...

  7. 5G承载网,到底有哪些关键技术?

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  小枣君 来源 | 鲜枣课堂 之前小枣君给大家介绍了5G承载网的基本知识(链接:5G承载网到底有什么不同?).今天,我们再来看看5G ...

  8. CRM——验证码(JWT技术)、接口资源鉴权

    目录 1.登录 1.1登录验证 1.2JWT简介 是什么 什么用 组成 1.3生成JWT 1.4 使用JWT生成token 2.接口资源鉴权 1.登录 前端会保存用户的UUID(后端自动生成的作为验证 ...

  9. 与信号压缩斗到底:光纤VPM技术解4K 60Hz传输架构与带宽之痛

    科技的进步加快了新技术转向消费市场领域的速度,在影像视听领域则表现为人们可以更容易地体验到4K显示技术带来的惊艳的视听效果.随着4K技术的普及,观影效果的深入人心,不同领域的厂商们都不约而同地使用4K ...

最新文章

  1. jsp窗口关闭的触发函数
  2. android之android Studio 安装后打不开的解决方法
  3. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
  4. 私有云之迷思:未来是什么?
  5. 仓库处理中 无法修改_临沂用友U8erp系统软件如何新增仓库?
  6. unity手机 通过php连接mysql_如何从Unity连接到数据库
  7. Linux打开文件操作的注意事项
  8. mysql的配置步骤
  9. MRS,MSR指令详解
  10. 使用SSH从服务器下载文件
  11. 按亩补贴?新都区2022年中央财政农业生产发展资金社会化服务项目申报补贴、条件、时间、材料及流程
  12. vsr matlab仿真,电压型PWM整流器(VSR)及控制系统的matlab仿真..docx
  13. 当耐克用上了AI、AR技术,你的鞋也要放飞自我了?Just Do It !
  14. matlab连续时间系统复频域分析,连续系统的复频域分析
  15. 荣耀开发者关怀月邂逅1024程序员节,请开发者喝咖啡
  16. C# 网络编程之获取本机名、ip地址、域名、物理位置
  17. s24.基于 Kubernetes v1.25 (二进制) 和 Docker部署高可用集群
  18. 南阳理工ACM_题目23
  19. 杭电ACM 1003
  20. 【jQuery】学习一下JS库——jQuery

热门文章

  1. java web中英翻译_中英文翻译简单web项目示例(3)
  2. 5G时代的来临,我们应该做好哪些网络安全准备?
  3. 2022华为机试真题 C++ 实现【分苹果】
  4. 【Linux】入门介绍
  5. 获得好资料都的渠道,老铁告别坑人的百度吧
  6. 中职双师型教师计算机培训总结,双师型教师计算机培训心得体会
  7. 计算机教学运用培训,教师计算机培训教学教程.doc
  8. 奋斗吧,程序员——第三十七章.雄关漫道真如铁,而今迈步从头越
  9. 千兆以太网和快速以太网有什么区别?
  10. 【Web技术】1397- 深入浅出富文本编辑器