结合令牌(JWT)和签名认证的系统登录及页面访问的详细实现原理和流程

embedded/2024/9/19 0:42:30/ 标签: java, spring boot, 个人开发

结合令牌(JWT)和签名认证的系统登录及页面访问的详细实现原理和流程如下:

1. 实现原理

1.1 JWT(JSON Web Token)令牌

JWT是一种用于用户认证的紧凑、安全的令牌格式。它通常由三部分组成:

  • Header(头部):指定签名算法和令牌类型(通常为HS256JWT)。
  • Payload(载荷):包含用户信息和一些元数据(如过期时间)。
  • Signature(签名):由Header和Payload通过指定的签名算法和密钥生成,用于验证数据的完整性。
1.2 签名认证

签名认证是在访问页面资源时,基于用户请求和某些关键数据(如用户ID、时间戳等)生成的签名,用于验证请求的合法性和完整性。签名不存储在本地,而是每次请求时重新生成。

2. 流程概述

系统登录和页面访问的流程主要包括以下几个步骤:

  1. 用户登录

    • 用户在登录页面输入用户名和密码。
    • 前端将用户名和密码发送到后端。
    • 后端验证用户名和密码是否正确。
    • 验证成功后,后端生成JWT令牌并返回给前端。
    • 前端将JWT令牌存储在本地(如localStoragesessionStorage)。
  2. 页面资源访问

    • 用户请求访问一个受保护的页面或资源。
    • 前端在请求中附加本地存储的JWT令牌。
    • 服务器接收到请求后,验证JWT令牌的有效性。
    • 验证通过后,服务器生成一个基于请求数据的签名,并将签名返回给前端。
    • 前端使用签名信息和资源请求数据访问具体的页面资源。

3. 流程详细说明

3.1 用户登录
  1. 前端

    • 用户在登录页面输入用户名和密码,并点击登录按钮。
    • 前端(HTML/JavaScript)通过POST请求将用户名和密码发送至后端的登录API。
  2. 后端

    • 后端接收到登录请求后,通过查询数据库验证用户名和密码的正确性。
    • 如果验证通过,后端使用用户信息生成一个JWT令牌。
    • JWT令牌的生成包含以下步骤:
      • 将用户ID等信息写入JWT的Payload。
      • 设置令牌的过期时间。
      • 使用服务器端的密钥通过指定的算法(如HS256)生成签名。
      • 将Header、Payload和Signature组合形成最终的JWT令牌。
    • 生成的JWT令牌通过响应返回给前端。
  3. 前端

    • 前端接收到JWT令牌后,将其存储在本地存储(localStoragesessionStorage)中,以便在后续请求中使用。
3.2 页面资源访问
  1. 前端

    • 用户点击或访问受保护的页面,前端从本地存储中读取JWT令牌,并在请求头中附加该令牌。
    • 同时,前端生成访问请求的相关数据(如页面ID、用户操作等),并发送请求到后端。
  2. 后端

    • 服务器接收到请求后,首先验证JWT令牌的有效性:
      • 验证令牌是否过期。
      • 验证令牌的签名是否有效(使用服务器端密钥)。
      • 验证通过后,提取用户信息。
    • 服务器基于请求中的数据(如页面ID、时间戳等)生成一个签名,并将签名信息返回给前端。
  3. 前端

    • 前端接收到签名信息后,将其与请求数据组合,并发送请求以获取页面资源。
    • 服务器根据签名的合法性,决定是否允许访问资源。

4. 安全性考量

  • JWT令牌:令牌自包含用户信息,并且使用签名保证数据的完整性,防止令牌被篡改。
  • 签名认证:通过每次生成新的签名,防止请求被重放。签名的内容应包含时间戳、用户信息等,以增强安全性。
  • 密钥管理:JWT签名和签名认证的密钥应妥善管理,确保只在服务器端存储和使用。

5. 实现注意事项

  • 令牌存储:避免将令牌存储在localStorage中,容易受到XSS攻击。可以考虑使用更安全的存储方案,如HttpOnly的Cookie。
  • 令牌刷新:JWT令牌有过期时间,需要实现令牌刷新机制,以防止用户长时间登录失效。
  • 签名有效期:签名应设置短时间内有效,防止重放攻击。

http://www.ppmy.cn/embedded/102290.html

相关文章

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

java整合Redis

Jedis Jedis是Redis官方推荐的Java连接开发工具,是一个用于连接和操作Redis数据库的Java客户端库。它提供了一系列的方法来操作Redis的键值存储、列表、哈希、集合和有序集合等数据结构。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的…

英特尔终止开发开源 H.265/HEVC 编码器项目

作为英特尔可扩展视频技术(SVT)计划的一部分,一直以来他们持续在开发 SVT-HEVC,这是一款 BSD 许可的高性能 H.265/HEVC 视频编码器,针对至强可扩展处理器和至强 D 处理器进行了优化。但最近他们改变了方向,…

2024生成式AI商业落地白皮书_火山引擎

更多详细内容请下载资源 2024生成式AI商业落地白皮书-火山引擎

使用Dockerfile创建应用镜像

在Docker file中定义所需要执⾏的指令,使⽤ docker build创建镜 像,过程中会按照dockerfile所定义的内容进⾏打开临时性容器,把 docker file中命令全部执⾏完成,就得到了⼀个容器应⽤镜像,每 ⼀⾏命令都会出现容器&…

【C++对于C语言的扩充】:auto关键字、范围for以及nullptr

文章目录 🚀auto关键字(C11)✈️auto介绍✈️auto的使用细则✈️auto不能使用的场景 🚀范围for(C11)✈️范围for介绍✈️范围for的使用条件 🚀指针空值nullptr(C11) &…

Spring Boot 应用中注册和使用 Filter

文章目录 1. 使用 WebFilter 注解2. 实现 Filter 接口并注册为 Spring Bean3. 使用 Spring Security 提供的 Filter4. 使用 Spring Boot Actuator 的 EndpointFilter注意事项 在Spring Boot中,Filter(过滤器)是一个用于在Servlet请求到达目标…

推荐3款免费的数据恢复软件,从此再也不怕数据丢失

Handy Recovery Handy Recovery是一款功能强大且易于使用的数据恢复软件,能够帮助用户恢复因误删、病毒攻击、系统崩溃等原因丢失的数据。该软件支持多种文件系统,包括FAT12/16/32、NTFS、NTFS5以及HFS等。它不仅可以从硬盘、闪存驱动器、U盘等设备中恢复…

第15届蓝桥杯青少组省赛Scratch初级组编程真题难度适中

刚刚结束考试的‍第十五届蓝桥杯青少组省赛Scratch编程初级组五道编程题难度比其他教育部白名单编程赛事要难,对于小低组的孩子来说,比较有难度,和往年蓝桥杯青少组的历届真题难度适中,考的是常用的Scratch知识点克隆和画笔、列表…

[Algorithm][综合训练][比那名居的桃子][chika和蜜柑][礼物的最大价值]详细讲解

目录 1.比那名居的桃子1.题目链接2.算法原理详解 && 代码实现 2.chika和蜜柑1.题目链接2.算法原理详解 && 详细讲解 3.礼物的最大价值1.题目链接2.算法原理详解 && 代码实现 1.比那名居的桃子 1.题目链接 比那名居的桃子 2.算法原理详解 && …

Laravel实现图片上传接口以及图片压缩优化测试

1. 创建 Laravel 项目 确保你已经安装了 Laravel 和相关依赖。创建一个新的 Laravel 项目: composer create-project --prefer-dist laravel/laravel image-upload cd image-upload2. 设置数据库 编辑 .env 文件以连接到你的数据库,然后运行迁移&…

功能测试和性能测试的区别?

功能测试与性能测试在软件测试中扮演着不同的角色,它们之间存在明显的区别,以下是功能测试与性能测试在对象、方法、关注点等方面的主要区别: 1、目的不同 功能测试:主要目的是评估软件的功能是否符合需求规格说明书中的要求&…

【Python入门】第6节 函数进阶

📖第6节 函数进阶 ✅函数多返回值✅函数多种传参方式🧊位置参数🧊关键字参数🧊缺省参数🧊不定长参数 ✅匿名函数🧊函数作为参数传递🧊lambda匿名函数 ✅函数多返回值 如果一个函数要有多个返回…

51单片机最快能生成多高频率的方波?

前言 在嵌入式系统开发中,51 单片机作为一种非常非常非常经典,贯穿上下几十年的微控制器,被广泛应用于各种电子项目中。其中,生成特定频率的方波信号是一项常见的需求。 那么,51 单片机究竟能以多快的速度生成方波呢&…

【jvm】局部变量表与GCRoots之间的关系

目录 1. 说明2. GC Roots的概念3. 局部变量表的作用4. 局部变量表与GC Roots的关系 1. 说明 1.局部变量表与GC Roots的关系主要体现在:局部变量表中的引用是GC Roots的一个重要组成部分,它们决定了哪些对象在垃圾收集过程中是可达的。2.通过理解这种关系…

什么是聚类?简单描述如下的聚类方法:划分方法,层次方法,基于密度的方法,基于模型的方法。为每类方法给出例子。

答:聚类是将数据划分为相似对象组的过程,使得同一组中对象相似度最大而不同组中对象相似度最小。 主要有以下几种类型方法: (1)划分方法: 给定一个有N个元组或者记录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,…

【前端储存】之localStrage、sessionStrage和Vuex

简介 什么是localStrage localStorage (本地存储)是一种在用户浏览器中存储数据的客户端存储方式,允许网站将键值对数据持久保存在用户的本地浏览器中。存储的数据不受浏览器关闭的影响,可以在不同会话和浏览器关闭后仍然保持有效…

win/mac视频剪辑软件Premiere Pro 2024下载安装

目录 一、简介 (一)高级调色功能 (二)字幕制作 (三)与其他 Adobe 软件的协同工作 下载 二、安装 (一)安装前的准备工作 (二)安装过程中的常见问题及解…

百度广告联盟:抢占流量蓝海,精准营销新引擎

百度广告联盟:抢占流量蓝海,精准营销新引擎 在数字营销时代,争夺消费者的注意力与流量成为品牌竞争的关键。百度广告联盟,作为互联网营销领域的佼佼者,凭借其广泛的平台覆盖、精准的受众定位以及丰厚的合作回报…

代码随想录算法训练营第十五天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、 222.完全二叉树的节点个数

Leetcode110.平衡二叉树 题目链接:110. 平衡二叉树 C:(后序遍历) class Solution { public:int getheight(TreeNode *node){if(node nullptr) return 0;//左int leftheight getheight(node->left);if(leftheight -1) return -1;//右int righthe…