JWT基础概念详解
JWT基础概念详解
JWT介绍
之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT。首先,我们来回顾一下使用Token进行身份认证。
- 客户端发送登录请求到服务器
- 服务器在用户登录成功之后会生成一个token,此时这个token可能会被存储到数据库、Redis等,实现可以共享,服务端会把生成的token返回给客户端
- 客户端也会存储这个token,每次请求需要携带这个token即可。
JWT是token的另一种方式,又有很多不同点。JWT全称是JSON Web Token,它的本质是一个字符串,它里面包含数据和签名,接下来我们看看JWT是如何进行身份认证的。
- 客户端发送登录请求到服务器
- 服务器在用户登录成功之后签发一个JWT Token,之后会把这个token直接返回给客户端,此时服务器端是不存储任何用户信息的。
- 客户端存储JWT Token,每次请求时携带这个token
- 服务端在每次请求前,检查传过来的token,判断签名、过期时间,验证通过后可以解析出token里面包含的用户信息。
JWT组成
JWT主要由3部分组成,分别是Header、payload、signature。下面我们具体讲讲每部分的作用。
Header
Header主要存储token类型和签名算法相关信息,例如
{
"alg": "HS256",
"typ": "JWT"
}
然后会把这个json字符串使用Base64进行编码,作为JWT的Header部分。
Payload
Payload主要是存储信息的,里面可以存储业务数据或者用户信息, JWT有以下7个默认字段可以选用。
- iss: Issure JWT签发方
- iat: Issued at time JWT签发时间
- sub: Subject JWT主题
- aud: Audience JWT接收方
- exp: Expiration time JWT过期时间
- nbf: Not before time JWT生效时间
- 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区别
- Token需要查询进行验证,JWT不需要,可以直接进行校验。
- Token需要存储在服务器端,JWT在服务器端不存储任何信息。
- Token可以在服务器端进行管理用户,例如登出、禁用,JWT不可以,JWT依赖客户端删除本地的JWT Token。
原文链接:https://monkey.blog.xpyvip.top/archives/jwt-ji-chu-gai-nian-xiang-jie
JWT基础概念详解的更多相关文章
- 图像处理术语解释:灰度、色相、饱和度、亮度、明度、阿尔法通道、HSL、HSV、RGBA、ARGB和PRGBA以及Premultiplied Alpha(Alpha预乘)等基础概念详解
☞ ░ 前往老猿Python博文目录 ░ 一.引言 由于老猿以前没接触过图像处理,在阅读moviepy代码时,对类的有些处理方法代码看不懂是什么含义,为此花了4天时间查阅了大量资料,并加以自己的理解和 ...
- [01-jwt]C# JWT基础知识详解
本篇文章将介绍jwt基础概念性知识,不含实操代码展示,特别适合该方面知识空白的人群,大神级别请选择性观看.不喜禁喷,出门右转,谢谢配合. 一.什么是JWT? JWT是简写,全称是JSON Web To ...
- RabbitMQ基础知识详解
什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...
- Cisco路由技术基础知识详解
第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是( )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12 ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- I2C 基础原理详解
今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...
- python 3.x 爬虫基础---Urllib详解
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...
- Nmap扫描教程之基础扫描详解
Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...
随机推荐
- SwiftUI实战教程-土豆List
代码库 教程中的项目代码都保存在这里:https://gitee.com/KINGWDY_admin/swiftui01 前言 在这一章节中,我们会使用List控件做一个土豆List,实现了列表填充. ...
- C++11实现的数据库连接池
它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...
- 最大连续子序列(简单DP实现)
最大连续子序列 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大.我们一起用多种方式,逐步优化解 ...
- 使用RandomAccessFile实现数据的插入效果
@Testpublic void test3() { RandomAccessFile raf1 = null; try { raf1 = new RandomAccessFile("hel ...
- cobaltstrike进行局域网远控
用cobaltstrike进行局域网远控 cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端及服务端,一个服务端可以对应多个客户端,一个客户端可以连接多个服务端. 实验原理: ...
- Python 爬取网站数据
一.使用request库实现批量下载HTML 二.使用BeautifulSoup库实现html解析 官网:https://beautifulsoup.readthedocs.io/zh_CN/v4.4 ...
- 如何修改SAO用户密码
KingbaseES SAO 用户是专门用于审计管理的用户,用户配置审计策略需要使用该用户.在initdb 完成后,SAO 用户的默认密码保存在参数 sysaudit.audit_table_pas ...
- 【读书笔记】C#高级编程 第二十一章 任务、线程和同步
(一)概述 所有需要等待的操作,例如,因为文件.数据库或网络访问都需要一定的时间,此时就可以启动一个新的线程,同时完成其他任务. 线程是程序中独立的指令流. (二)Paraller类 Paraller ...
- Kratos漫游指南 1 - 概览
您好,地球人,欢迎来到Kratos漫游指南. 对于刚开始研究Kratos框架的开发者来说,目前的文档有些零散,这与我们的模块化设计有一些关系,不过Don't panic,从这篇文章开始,我将试图打破这 ...
- flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解