一、JWT简介

JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。

更多信息可以查看官网:https://jwt.io/introduction/

二、JWT认证和session认证的区别

  1. session认证

http协议是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发送的请求,所以为了让我们的应用能识别是哪个用户发出的,我们只能在服务器存储一份用户登陆的信息,这份登陆信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用个就能识别请求来自哪个用户了,这就是传统的基于sessino认证。

  1. JWT认证

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或会话信息。这也就意味着JWT认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

三、JWT认证流程

认证流程如下:

  1. 用户使用账号和密码发出post请求;
  2. 服务器使用私钥创建一个jwt;
  3. 服务器返回这个jwt给浏览器;
  4. 浏览器将该jwt串在请求头中像服务器发送请求;
  5. 服务器验证该jwt;
  6. 返回响应的资源给浏览器。

四、JWT组成

先来看一张JWT的信息的截图:

从上图可以看到,JWT含有三部分:头部(header)、载荷(payload)、签名(signature)。

  1. 头部(header)

JWT的头部有两部分信息:

  • 声明类型,这里是JWT
  • 声明加密的算法,通常直接使用HMAC SHA256

头部示例如下:

头部一般使用base64加密,加密后密文:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

  1. 载荷(payload)

该部分一般存放一些有效的信息。JWT的标准定义包含五个字段:

  • iss:该JWT的签发者
  • sub: 该JWT所面向的用户
  • aud: 接收该JWT的一方
  • exp(expires): 什么时候过期,这里是一个Unix时间戳
  • iat(issued at): 在什么时候签发的

载荷示例如下:

  1. 签名(signature)

前面两部分都是使用Base64进行编码的,即前端可以解开知道里面的信息。signature 需要使用编码后的header和payload以及我们提供的一个密钥,然后使用header中指定的签名算法(HS256)进行签名。签名的作用是保证 JWT 没有被篡改过。

三个部分通过.连接在一起就是我们的 JWT 了,所以我们生成的JWT如下:

注意:密钥就是用来进行JWT的签发和JWT的验证,所以,它就是你服务端的私钥,在任何场景都不应该泄露出去。

五、JWT使用场景

JWT主要使用场景如下:

  • 授权

这是JWT使用最多的场景,一旦用户登录,每个后续的请求将包括JWT,从而允许用户访问该令牌允许的路由、服务和资源。

  • 信息交换:JSON

JWT可以用在各方之间安全地传输信息,因为JWT可以进行签名,所以您可以确定发件人是他们所说的人。另外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否未被篡改。

jwt 私钥_一分钟带你了解JWT认证相关推荐

  1. jwt 私钥_三分钟带你了解JWT认证

    目录 一.JWT简介 二.JWT认证和session认证的区别 三.JWT认证流程 四.JWT组成 五.JWT使用场景 一.JWT简介 JSON Web Token(JWT)是一个开放的标准(RFC ...

  2. mysql和oracle冲突吗_三分钟带你分清MySQL 和Oracle之间的误区

    原标题:三分钟带你分清MySQL 和Oracle之间的误区 来自:华为云开发者社区 摘要:MySQL和Oracle,别再傻傻分不清. MySQL 和Oracle 在开发中的使用是随处可见的,那就简单去 ...

  3. jwt 私钥_什么是 JSON Web Token(JWT)

    有关本文档的快速链接,请参考页面提示. 什么是 JSON Web Token(JWT)? JSON Web Token (JWT) 作为一个开放的标准 (RFC 7519) 定义了一种简洁自包含的方法 ...

  4. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  5. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

    一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...

  6. c语言实现java接口_五分钟带你了解Java是如何从容而优雅地实现接口数据校验

    本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返 ...

  7. rocketmq广播消息为什么不能重试_几分钟带你看懂“消息队列和RocketMQ”的入门总结

    消息队列扫盲 消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧? 所以问题并不是消息队列是什么,而是 消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带 ...

  8. druid seata 配置_五分钟带你了解Seata分布式事务

    1.Seata介绍 Seata是由阿里中间件团队发起的开源项目 Fescar,后更名为Seata,它是一个是开源的分布式事务框架. 传统2PC的问题在Seata中得到了解决,它通过对本地关系数据库的分 ...

  9. 3d 根据弧长算角度_三分钟带你了解三姆森3D玻璃厚度及轮廓度检测

    曲面玻璃成为手机盖板市场主流 随着3C行业产品的发展需求和创新,催生了3D 曲面玻璃这一炙手可热的市场蓝海,陆续出现了相关的3D 曲面玻璃产品:如智能手机.智能手表.平板计算机.可穿戴式智能产品.仪表 ...

最新文章

  1. Eclipse安装Svn无法连接问题
  2. MapReduce的优点
  3. 分享一个简单程序(webApi+castle+Automapper+Ef+angular)
  4. openstack介绍(二)
  5. android recyclerview gradle,Android RecyclerView 的简单使用
  6. 话里话外:流程图绘制初级:六大常见错误
  7. 关于url传参中文乱码问题
  8. PL/SQL Developer自动补全SQL技巧
  9. 如何避免大数据分析的失误
  10. MongoDB复制集全量同步改进
  11. RapidMiner Studio入门
  12. Linux学习之计划任务(at、batch、crontab)篇
  13. codeforces949D Curfew
  14. POJ 1564 Sum It Up
  15. 苹果手机用H5 audio标签无法自动播放音乐解决方法/html网页自动播放音乐
  16. 港科夜闻|香港科技大学参与共建「粤港水安全保障联合实验室」,开展水资源风险评估等方面交叉研究和成果转化...
  17. R语言logistic回归的细节解读
  18. centos7软件仓库资源的配置目录
  19. 海康大华宇视等等安防监控摄像头转成WebRTC流实现Web浏览器超低延迟无插件直播新方案
  20. migo初始化库存 s4_SAP项目用户操作手册-MIGO 货物移动.docx

热门文章

  1. 迭代是人,递归是神(迭代与递归的总结:比较)
  2. 操作系统学习笔记 第六章:设备管理(王道考研)
  3. CodeGen处理Synergy方法目录
  4. 提高智能家居设备的兼容性
  5. 5G和AI机器人平台为工业4.0和无人机提供服务
  6. 2021年大数据Flink(四十二):​​​​​​​BroadcastState
  7. [C] 图的广度优先遍历
  8. Ubuntu 系统下终端界面在打开一个终端的快捷键
  9. java.lang.NoSuchMethodError: No virtual method placeholder(I)Lcom/bumptech/
  10. Android library module生成aar文件