首页 > 其他分享 >JWT基础概念详解

JWT基础概念详解

时间:2022-10-22 23:35:34浏览次数:62  
标签:存储 JWT Token 概念 token 详解 Payload 客户端

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主要存储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,Token,概念,token,详解,Payload,客户端
From: https://www.cnblogs.com/aibianchengya/p/16817598.html

相关文章

  • Python元类详解
    目录PythonMetaClass一、万物皆对象1、简介2、Python对象3、type|object|class3.1关系3.2创建类的第二中方式二、元类1、什么是元类2、调用流程3、函数做元类4......
  • Docker基础:容器元数据详解
    今天给大家介绍Docker容器元数据里面包含内容详解,如有不当之处,欢迎大家指正。查看容器元数据主要通过dockerinspect容器id进行查看。今天通过docker安装的mysql查看启动的......
  • 机器学习重要概念
    机器学习本身的缺陷''Allmodelsarewrong,someuseful''我们在训练的时候是不可能看到全局的,就像是盲人摸象一样,但是我们又想要自己的模型能尽可能准确的描述出数据背......
  • 什么是分布式,史上最全详解!​
    转自:https://blog.csdn.net/androidstarjack/article/details/118347050  集群与分布式区别集群:复制模式,每台机器做一样的事。分布式:两台机器分工合作,每台机器做的......
  • TCP协议详解一
    TCP协议的报文格式传输层TCP协议提供了一种面向连接的、可靠的字节流服务,其数据帧格式,大致如下图所示: 图:传输层TCP协议的数据帧格式 一个传输层TCP协议的数据帧,大致......
  • JDBC各个类详解_DriverManager_获取数据库连接与JDBC各个类详解_Connection
    JDBC各个类详解_DriverManager_获取数据库连接1.获取数据库连接方法:staticConnectiongetConnection(Stringurl,Stringus......
  • Android USB之复合设备(gadget)详解
    一.USBgadgetdriverUSBgadget驱动描述了USB设备控制器的硬件操作方法,不同的USB控制器实现不同。有的USB控制器只能作为设备控制器,如ompa、pxa2等USB设备控制器,其......
  • EMV分析与决策树学习不是一个“概念”
    两者不同,而且是两个名词EMV分析、决策树;而不是一个名字“EMV分析与决策树”。在项目管理领域,预期货币值(EMV):又称风险暴露值、风险期望值,是定量风险分析的一种技术,常和决......
  • JDBC_快速入门与JDBC各个类详解_DriverManager_注册驱动
    JDBC_快速入门步骤:1.导入驱动jar包:mysql-connector-java-5.1.37-bin.jar1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs......
  • DCL_管理权限与JDBC_概念
    DCL_管理权限权限管理:查询权限:1.基本语法格式:showgrantsfor'用户名'@'主机名';......