java编程之java jwt token什么是JWT?(一)

2023-11-10

转自:http://www.leftso.com/blog/220.html

一、什么是JWT?了解JWT,认知JWT

  首先jwt其实是三个英语单词JSON Web Token的缩写。通过全名你可能就有一个基本的认知了。token一般都是用来认证的,比如我们系统中常用的用户登录token可以用来认证该用户是否登录。jwt也是经常作为一种安全的token使用。

JWT的定义:
  JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。
JWT特点:
  • 简洁(Compact): 可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快

  • 自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库

二、JWT构成或者说JWT是什么样的?

2.1.JWT结构
JWT主要包含三个部分之间用英语句号'.'隔开
  1. Header 头部
  2. Payload 负载
  3. Signature 签名
注意,顺序是 header.payload.signature
最终的结构有点像这样:
leftso.com.blog
当然真实的jwt不可能是这么简单的明文

2.2.JWT的头部(Header)
在header中通常包含了两部分:token类型和采用的加密算法。如下:
{
  "alg": "HS256",
  "typ": "JWT"
}  
上面的JSON内容指定了当前采用的加密方式为HS256,token的类型为jwt

将上面的内容进行base64编码,可以得到我们JWT的头部,编码后如下:
(本站提供了在线的base64编码/解码的工具,可供读者测试)
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=

2.3.JWT的负载(Payload)
负载(Payload)为JWT的第二部分。JWT的标准所定义了一下几个基本字段
  1. iss: 该JWT的签发者
  2. sub: 该JWT所面向的用户
  3. aud: 接收该JWT的一方
  4. exp(expires): 什么时候过期,这里是一个Unix时间戳
  5. iat(issued at): 在什么时候签发的

除了标准定义的字段外,我们还要定义一些我们在业务处理中需要用到的字段,例如用户token一般可以包含用户登录的token或者用户的id,一个简单的例子如下:
{
    "iss": "Lefto.com",
    "iat": 1500218077,
    "exp": 1500218077,
    "aud": "www.leftso.com",
    "sub": "leftso@qq.com",
    "user_id": "dc2c4eefe2d141490b6ca612e252f92e",
    "user_token": "09f7f25cdb003699cee05759e7934fb2"
}
上面的user_id、user_token都是我们自己定义的字段

现在我们需要将负载这整个部分进行base64编码,编码后结果如下:
ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9

2.4. Signature(签名)
签名其实是对JWT的头部和负载整合的一个签名验证
首先需要将头部和负载通过.链接起来就像这样:header.Payload,上述的例子链接起来之后就是这样的:
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=.ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9

由于HMacSHA256加密算法需要一个key,我们这里key暂时用leftso吧

加密后的内容为:
686855c578362e762248f22e2cc1213dc7a6aff8ebda52247780eb6b5ae91877

其实加密的内容也就是JWT的签名,类似我们对某个文件进行MD5加密然后接收到文件进行md5对比一样.只是这里的HMacSHA256算法需要一个key,当然这个key应该是使用者和接收者都知道的。

对上面的签名内容进行base64编码得到最终的签名
Njg2ODU1YzU3ODM2MmU3NjIyNDhmMjJlMmNjMTIxM2RjN2E2YWZmOGViZGE1MjI0Nzc4MGViNmI1YWU5MTg3Nw==

2.5最终的JWT
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9ICA=.ewogICAgImlzcyI6ICJMZWZ0by5jb20iLAogICAgImlhdCI6IDE1MDAyMTgwNzcsCiAgICAiZXhwIjogMTUwMDIxODA3NywKICAgICJhdWQiOiAid3d3LmxlZnRzby5jb20iLAogICAgInN1YiI6ICJsZWZ0c29AcXEuY29tIiwKICAgICJ1c2VyX2lkIjogImRjMmM0ZWVmZTJkMTQxNDkwYjZjYTYxMmUyNTJmOTJlIiwKICAgICJ1c2VyX3Rva2VuIjogIjA5ZjdmMjVjZGIwMDM2OTljZWUwNTc1OWU3OTM0ZmIyIgp9.Njg2ODU1YzU3ODM2MmU3NjIyNDhmMjJlMmNjMTIxM2RjN2E2YWZmOGViZGE1MjI0Nzc4MGViNmI1YWU5MTg3Nw==

通过上面的一个简单的说明您是否对JWT有一个简单额认知了呢?接下来我将讲解JWT在Java编程中的使用

未完待续中...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java编程之java jwt token什么是JWT?(一) 的相关文章

随机推荐

  • Android ems的问题 其含义是需要编辑的字符串长度。

    ems的问题 其含义是需要编辑的字符串长度 设置为10时 最多编辑10个em 一个em单位是两个inch
  • 循环获取Java中泛型T的属性以及属性值

    利用 Java 的反射机制来获取泛型类中的属性及其对应的值 具体实现方式如下 import java lang reflect Field public class GenericClassUtil
  • 2020延迟最低的dns_DNS 优选 - 更换 DNS 加快网站访问速度

    小编此前分享了一篇 解决由 DNS 设置错误或不当导致的问题 的文章 但 手动配置 对于 新手用户 还是 不够友好 而且需要 通过命令 测试适合自己的 网络环境 的 DNS 地址 而今天推荐的 DNS 优选 是款可以帮助我们 批量获取 适合
  • 03 linux用户权限和软件安装与管理

    文章目录 linux用户权限和软件安装与管理 1 用户 用户组 其他人概述 1 1 用户 1 2 用户组 2 用户和用户组管理 2 1 Linux用户身份与用户组记录的文件 2 2 Linux系统用户账号的管理 2 3 Linux系统用户组
  • 存储 虚拟 服务器,服务器:存储虚拟化

    作为一种存储虚拟形式 RAID首先将物理设备组合为池 然后从这一池中 切割 出一组虚拟逻辑单元 LUN 并将其提供给主机 到20世纪90年代末 许多新型的存储虚拟化技术相继出现 它们的目标多数都是改善管理和利用率 从那以后 存储虚拟化已经从
  • 第三章习题第七题、c程序设计(第四版)、(求圆周长、面积等)

    谭浩强 c程序设计 第四版 第三章习题第七题 include
  • QT的cmake项目工程配置

    QT的项目工程默认使用的是qmake 这本来也没什么问题 但是由于要用到vcpkg这个工具来管理第三方库 好像这个 vcpkg工具只能在cmake的项目中才能使用 于是这里记录下QT的cmake工程配置 需要注意的是需要额外配置个项 DCM
  • xilinx 7系列FPGA之XADC的学习笔记

    Xilinx的7系列FPGA和Zynq器件在片上集成了模数转换器和相关的片上传感器 内置温度传感器和功耗传感器 可在系统设计中免去外置的ADC器件 有力地提高了系统的集成度 在7系列FPGA里 除了少数spartan系列的低端FPGA没有X
  • 华为OD机试 -记负均正(C++ & Java & JS & Python)

    描述 首先输入要输入的整数个数n 然后输入n个整数 输出为n个整数中负数的个数 和所有正整数的平均值 结果保留一位小数 0即不是正整数 也不是负数 不计入计算 如果没有正数 则平均值为0 数据范围 1 2000 1 n 2000 输入的整数
  • Ubuntu 内存泄漏检测工具Valgrind的安装

    第一种方式 下载源码 编译安装 比较复杂 wget http valgrind org downloads valgrind 3 4 1 tar bz2 tar xvf valgrind 3 4 1 tar bz2 cd valgrind
  • Openwrt开发之网络配置

    MT7688平台运行Openwrt18 06版本 mt7688的rt305x esw交换芯片有6个交换接口 其中一个和CPU内核连接 其余可通过RJ45接口引出 手里的开发板只引出其中3个口 这3个口一个作为wan口 其余两个作为lan口
  • pink老师【品优购商城】

    最初 好久之前学过H5 CSS JS 跟着黑马的pink老师写了品优购商城的静态界面 复习一下的同时也学到了许多东西 收获 链接 https pan baidu com s 1P5FautCJCwK vTMFycvV1w pwd wsox
  • 【点云重采样Resampling】Python-pcl 基于多项式平滑点云及法线估计的曲面重建

    1 点云重采样 基于多项式平滑点云及法线估计的曲面重建以实现重采样 可以使得点云数据更规整一些 没之前那么杂乱 set Compute Normals True 可以通过在最小二乘法中进行法线估计 提高重采样准确度 set polynomi
  • char&short的整形提升

    目录 前言 整形提升的意义 整形提升的步骤 负数的整形提升 正数的整形提升 无符号整形提升 整形提升的例子 前言 前面我们介绍了有关C语言中操作符的有关知识 当然操作符的作用就是要求相关表达式的值 当不同的数据类型相加减的时候 我们要进行一
  • 嵌入式数据库sqlite3交叉编译和移植测试总结

    一 背景 根据项目需求 需要使用数据库存放一些数据 比如用户信息 配置参数 以及后期所采集RTU设备的数据等 这里选择了适合嵌入式产品的数据库 sqlite3 二 移植平台和环境 主机端 Ubuntu ARM板 ZLG EasyARM i
  • 事务并发问题及事务隔离级别的学习

    以下内容都是看的咕泡学院的大神老师讲的一个公开课 就是记录一下 事务并发带来的三大问题 1 脏读 如下图 左右两个事务A B 事务A首先查询id 1的数据 得到age 16之后 事务B对id 1的数据 将age 16更新为age 18 然后
  • STM32驱动步进电机(原理、程序、解决电机只震动不转动问题)

    一 步进电机的介绍 首先来看一下步进电机的样子 本介绍采用平时最常见也是最简单的28BYJ 48 这是一个五线四项电机 五线 顾名思义 外部五条线 四项 电机内部的定子上有8个齿 正对着的2个齿上的绕组又是串联在一起的 也就是说正对着的2个
  • STM32CUBE 定时器使用

    目录 STM32F407VET6 定时中断 记录各个STM32型号的定时器使用方法 包括定时中断 输入捕获等功能 持续更新 STM32F407VET6 定时中断 时钟配置 这里主频配置为100Mhz 最高168Mhz 即HCLK 100MH
  • [用python辅助学生中考与高考-1]:家长篇-科技特长生概述与优势

    目录 前言 这是科技的最好时代 1 什么是科技特长生 2 科技特长生的优势 科技特长生录取方式 3 科技特长生的类型 4 科技特长生七大招生类目 5 如何成为科技特长生 6 常见的赛事 前言 这是科技的最好时代 随着国家强基计划的出台和国际
  • java编程之java jwt token什么是JWT?(一)

    转自 http www leftso com blog 220 html 一 什么是JWT 了解JWT 认知JWT 首先jwt其实是三个英语单词JSON Web Token的缩写 通过全名你可能就有一个基本的认知了 token一般都是用来认