JWT基础概念详解

JWT介绍

之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT。首先,我们来回顾一下使用Token进行身份认证。

  1. 客户端发送登录请求到服务器
  2. 服务器在用户登录成功之后会生成一个token,此时这个token可能会被存储到数据库、Redis等,实现可以共享,服务端会把生成的token返回给客户端
  3. 客户端也会存储这个token,每次请求需要携带这个token即可。

JWT是token的另一种方式,又有很多不同点。JWT全称是JSON Web Token,它的本质是一个字符串,它里面包含数据和签名,接下来我们看看JWT是如何进行身份认证的。

  1. 客户端发送登录请求到服务器
  2. 服务器在用户登录成功之后签发一个JWT Token,之后会把这个token直接返回给客户端,此时服务器端是不存储任何用户信息的。
  3. 客户端存储JWT Token,每次请求时携带这个token
  4. 服务端在每次请求前,检查传过来的token,判断签名、过期时间,验证通过后可以解析出token里面包含的用户信息。

JWT组成

JWT主要由3部分组成,分别是Header、payload、signature。下面我们具体讲讲每部分的作用。

Header

Header主要存储token类型和签名算法相关信息,例如

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

然后会把这个json字符串使用Base64进行编码,作为JWT的Header部分。

Payload

Payload主要是存储信息的,里面可以存储业务数据或者用户信息, JWT有以下7个默认字段可以选用。

  1. iss: Issure JWT签发方
  2. iat: Issued at time JWT签发时间
  3. sub: Subject JWT主题
  4. aud: Audience JWT接收方
  5. exp: Expiration time JWT过期时间
  6. nbf: Not before time JWT生效时间
  7. jti: JWT ID

下面我们举个例子

{
"sub": "123456",
"username": "admin"
}

上面的json字符串会使用Base64进行编码,作为JWT的Payload部分,Payload部分默认是不加密的,所以一定不要把隐私信息放在Payload当中。

Signature

Signature是对上面两部分的数据的签名,对上面的Header和Payload数据,通过指定的算法生成Hash,防止数据被篡改。下面是签名的计算公式

HMACSHA256(base64UrkEncode(header) + "." + base64UrlEncode(payload), secret)

在计算出签名后,将上述的Header、Payload和Signature连接成一个字符串,中间使用"."进行分隔,这个就是最终的JWT。

JWT和Token区别

  1. Token需要查询进行验证,JWT不需要,可以直接进行校验。
  2. Token需要存储在服务器端,JWT在服务器端不存储任何信息。
  3. Token可以在服务器端进行管理用户,例如登出、禁用,JWT不可以,JWT依赖客户端删除本地的JWT Token。

原文链接:https://monkey.blog.xpyvip.top/archives/jwt-ji-chu-gai-nian-xiang-jie

JWT基础概念详解的更多相关文章

  1. 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于老猿以前没接触过图像处理,在阅读moviepy代码时,对类的有些处理方法代码看不懂是什么含义,为此花了4天时间查阅了大量资料,并加以自己的理解和 ...

  2. [01-jwt]C# JWT基础知识详解

    本篇文章将介绍jwt基础概念性知识,不含实操代码展示,特别适合该方面知识空白的人群,大神级别请选择性观看.不喜禁喷,出门右转,谢谢配合. 一.什么是JWT? JWT是简写,全称是JSON Web To ...

  3. RabbitMQ基础知识详解

    什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...

  4. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  5. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  6. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  7. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  8. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  9. Nmap扫描教程之基础扫描详解

    Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...

随机推荐

  1. SwiftUI实战教程-土豆List

    代码库 教程中的项目代码都保存在这里:https://gitee.com/KINGWDY_admin/swiftui01 前言 在这一章节中,我们会使用List控件做一个土豆List,实现了列表填充. ...

  2. C++11实现的数据库连接池

    它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...

  3. 最大连续子序列(简单DP实现)

    最大连续子序列 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解 ...

  4. 使用RandomAccessFile实现数据的插入效果

    @Testpublic void test3() { RandomAccessFile raf1 = null; try { raf1 = new RandomAccessFile("hel ...

  5. cobaltstrike进行局域网远控

    用cobaltstrike进行局域网远控 cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端及服务端,一个服务端可以对应多个客户端,一个客户端可以连接多个服务端. 实验原理: ...

  6. Python 爬取网站数据

    一.使用request库实现批量下载HTML 二.使用BeautifulSoup库实现html解析 官网:https://beautifulsoup.readthedocs.io/zh_CN/v4.4 ...

  7. 如何修改SAO用户密码

    KingbaseES SAO 用户是专门用于审计管理的用户,用户配置审计策略需要使用该用户.在initdb 完成后,SAO  用户的默认密码保存在参数 sysaudit.audit_table_pas ...

  8. 【读书笔记】C#高级编程 第二十一章 任务、线程和同步

    (一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller ...

  9. Kratos漫游指南 1 - 概览

    您好,地球人,欢迎来到Kratos漫游指南. 对于刚开始研究Kratos框架的开发者来说,目前的文档有些零散,这与我们的模块化设计有一些关系,不过Don't panic,从这篇文章开始,我将试图打破这 ...

  10. flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解