浅学JWT跨域认证

news2024/9/25 15:25:38

Json Web令牌简称JWT

由Header+Payload+Signature组成

Header

JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存

Payload

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。 JWT指定七个默认字段供选择

Signature

签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。

JWT的使用

加入依赖

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>4.3.0</version>
</dependency>

测试案例

@Test
//生成token
void jwtdemo01(){
     Calendar instance = Calendar.getInstance();
     //instance.add(Calendar.SECOND, 90);
     instance.add(Calendar.DAY_OF_WEEK, 7);

    System.out.println(instance.getTime());
    String token = JWT.create()
            .withClaim("username", "李四")//payload 设置自定义用户名
            .withExpiresAt(instance.getTime())//设置过期时间
            .sign(Algorithm.HMAC256("123"));//设置签名 密钥
    System.out.println(token);
    //"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDM5NDcyODMsInVzZXJuYW1lIjoi5p2O5ZubIn0.3onRy8p0G9ojnpA9u5h5ytd8hLZpGMZUyj49LTge5ao"
}

@Test
//验证token
void jwtdemo02(){
    //创建验证对象
    //参数1:签名使用的算法 参数2:签名的密钥
    JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("123")).build();
    //
    DecodedJWT verify =jwtVerifier.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDM5NDcyODMsInVzZXJuYW1lIjoi5p2O5ZubIn0.3onRy8p0G9ojnpA9u5h5ytd8hLZpGMZUyj49LTge5ao");
    System.out.println(verify.getClaim("username"));
}

Session认证

session用户认证流程

1、用户向服务器发送用户名和密码。

2、服务器验证通过后,在当前对话( session)里面保存相关数据,比如用户角色登录时间等。

3、服务器向用户返回一个 session_id,写入用户的 Cookie。

4、用户随后的每一次请求,都会通过Cookie,将 session_id传回服务器。

5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

Token认证

Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。

Token认证流程

1、客户端使用用户名跟密码请求登录,服务端收到请求,验证用户名与密码验证成功后,服务端会签发一个 token并把这个 token发送给客户端,客户端收到 token后,会把它存储起来,比如放在cookie里或者localStorage里

2、客户端每次向服务端请求资源的时候需要带着服务端签发的 token

3、服务端收到请求,然后去验证客户端请求里面带着的 token,如果验证成功就向客户端返回请求的数据

token用户认证是一种服务端无状态的认证方式,服务端不用存放token数据。

用解析 token的计算时间换取 session的存储空间,从而减服务器的力,减少频繁的查询数据库

token完全由应用管理,所以它可以避开同源策略

JWT的使用

JSON Web Token(简称JWT)是一个 token的具体实现方式,是目前最流行的跨域认证解决方案。JWT的原理是:服务器认证以后,生成一个JSON对象,发回给用户。

{

       “name” :”张三”,

       “time”:”2022年10月10日”

}

用户与服务端通信时,都要发回该JSON对象。服务器完全只靠这个对象认定用户身份。

为防止用户篡改数据,服务器在生成对象时,会加上签名

JWT由三个部分组成:Header(头部)、Payload(负载)、Signature(签名)

Header.Payload.Signature

官方描述

Header

JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。最后,使用Base64 URL算法将上述JSON对象转换为字符串保存

{

  "alg": "HS256",

  "typ": "JWT"

}

Payload

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。 JWT指定七个默认字段供选择

iss:发行人

exp:到期时间

sub:主题

aud:用户

nbf:在此之前不可用

iat:发布时间

jti:JWT ID用于标识该JWT

Signature

签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1334670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

湘沪数字产业(上海)协同创新中心正式启动!

前言 随着全球化的加速和市场竞争的日益激烈&#xff0c;产业协作已成为推动科技创新和经济发展的重要手段。在创新驱动战略的推动下&#xff0c;全国形成了在科创核心城市建设科创中心的浪潮&#xff0c;旨在充分利用不同区域的产业优势&#xff0c;加强产业协作&#xff0c;…

BFS解决FloodFill算法相关leetcode算法题

文章目录 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域 1.图像渲染 图像渲染 class Solution {int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0}; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int…

计算机视觉技术-使用图像增广进行训练

让我们使用图像增广来训练模型。 这里&#xff0c;我们使用CIFAR-10数据集&#xff0c;而不是我们之前使用的Fashion-MNIST数据集。 这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化&#xff0c;而CIFAR-10数据集中对象的颜色和大小差异更明显。 CIFAR-10数据集中的前…

【MIMO 从入门到精通】[P4]【MIMO Communications】

前言&#xff1a; Explains the main approaches to multi-input multi-output (MIMO) communications, including Beamforming, Zero Forcing, and MMSE. * Note that at the 9:19min mark, I made a slight "voice typo", where I should have said: "you nee…

AI进化太快了!Stability AI开源视频生成大模型Stable Video Diffusion

对于 Stable Diffusion&#xff0c;想必读者朋友们对此都不陌生。 自 Stability AI 公司发布 SD&#xff08;全称&#xff1a;Stable Diffusion) 以来&#xff0c;受到了很多人的喜爱。 SDXL 效果 随后技术升级&#xff0c;又发布了 SDXL&#xff0c;名字很有喜感&#xff0c…

计网04-网络传输介质

物理层&#xff08;网卡、传输介质&#xff09; 一、信号 &#xff11;、概念 进行网络通信在线缆中传输的就是信号&#xff0c;网线传输电信号&#xff0c;光纤传输光信号。 信息&#xff1a;对现实事物存在的某种认识数据&#xff1a;描述某些属性的具体的量子&#xff0…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

迪杰斯特拉算法详解

迪杰斯特拉算法详解 首先要知道的是&#xff0c;迪杰斯特拉算法是求解单源最短路径的&#xff0c;就是在一个图中&#xff08;无向图和有向图均可&#xff09;&#xff0c;指定一个源点&#xff0c;求出来这个源点到其他各个节点的最短路径。 存图 首先&#xff0c;我需要用…

HarmonyOS应用兼容稳定性云测试

兼容性测试 兼容性测试主要验证HarmonyOS应用在华为真机设备上运行的兼容性问题&#xff0c;包括首次安装、再次安装、启动、卸载、崩溃、黑白屏、闪退、运行错误、无法回退、无响应、设计约束场景。具体兼容性测试项的详细说明请参考兼容性测试标准。 兼容性测试支持TV、智能穿…

爬虫系列----Python解析Json网页并保存到本地csv

Python解析JSON 1 知识小课堂1.1 爬虫1.2 JSON1.3 Python1.4 前言技术1.4.1 range1.4.2 random1.4.3 time.sleep1.4.4 with open() as f: 2 解析过程2.1 简介2.2 打开调试工具2.3 分析网址2.3.1 网址的规律2.3.2 网址的参数 2.4 爬取第一页内容2.5 存入字典并获取2.6 循环主体数…

DolphinScheduler 介绍及系统架构

目录 一、DolphinScheduler 介绍 1.1 关于 DolphinScheduler 1.2 特性 简单易用 丰富的使用场景 High Reliability High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler 系统架构 2.1 系统架构图 2.2 架构说明 MasterServer 该服…

【Java核心基础】一文带你了解Java中super关键字的重要作用

“super”关键字在编程中扮演着重要角色&#xff0c;它允许我们直接访问父类中的属性、方法或构造函数&#xff0c;即使子类中存在同名元素。此外&#xff0c;“super()”在子类构造函数中调用父类初始化操作&#xff0c;确保父类属性正确初始化。有时&#xff0c;“super”还可…

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项&#xff08;ffmpeg&#xff09;总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个&#xff1a; 一、基本情况 这次爬取的方…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计&#xff0c;从下向上依次为&#xff1a;内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开&#xff0c;在多设备部署场景下&#xff0c;支持根据实际需求裁剪某些非必要的组件…

【RocketMQ】Console页面报错:rocketmq remote exception,connect to xxx failed.

现象 console报错&#xff0c;无法连接该节点&#xff0c;把该节点杀掉&#xff0c;还是继续报错&#xff0c;重启之后&#xff0c;报错的端口变成11911。 分析 正常一个broker会启动三个端口&#xff0c;不同版本的规律不太一样&#xff0c;4.X版本是&#xff1a; 配置文件…

如何使用ScrapySharp下载网页内容

C#简介 C#是一种由微软开发的通用、面向对象的编程语言。它结合了C和C的优点&#xff0c;并封装了Java的一些特性。C#被广泛评价Windows平台的软件开发&#xff0c;包括Web应用、桌面应用和游戏开发等领域。 使用场景 在网络数据挖掘和信息收集的过程中&#xff0c;我们需要…

3D模型如何制作透明玻璃材质

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 1、什么是玻璃材质 在3D建模和渲染中&#xff0c;玻璃是一种非常常见…

【期末复习】微信小程序复习大纲( 1- 5 章)

前言&#xff1a; 这周开始进入期末复习周&#xff0c;没时间看C/C、linux等知识了&#xff0c;先把期末考试必考的知识捋一遍。 目录 第一章 微信小程序入门 一、填空题 二、判断题 三、选择题 四、简答题 第二章 微信小程序页面制作 一、填空题 二、判…