springcloud:4.2 GateWay结合JWT实现网关鉴权

概述

概述

简介

JWT是一种用于双方之间传递安全信息的简洁的、URL安全的声明规范。

定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。

特别适用于分布式站点的单点登录(SSO)场景

传统的session认证的缺点

安全性:CSRF攻击因为基于cookie来进行用户识别, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

扩展性:对于分布式应用,需要实现 session 数据共享

性能:每一个用户经过后端应用认证之后,后端应用都要在服务端做一次记录,以方便用户下次请求的鉴别, 通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大

使用方式

客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在 localStorage,此后,客户端每次与服务器通信,都要带上这个JWT。 可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。

结构

头部header

{
"alg": "HS256",
"typ": "JWT"
}
alg属性表示签名的算法,默认是 HMAC SHA256(写成 HS256
typ属性表示这个令牌(token)的类型(type),统一写为 JWT

载荷payload

{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
内容又可以分为3中标准:标准中注册的声明/公共的声明/私有的声明
1.payload-标准中注册的声明 (建议但不强制使用):
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
2.payload-公共的声明 :
公共的声明可以添加任何的信息。一般这里我们会存放一下用户的基本信息(非敏感信息)
3.payload-私有的声明 :
私有声明是提供者和消费者所共同定义的声明。需要注意的是,不要存放敏感信息!!!

签证signature

这部分就是 JWT 防篡改的精髓,其值是对前两部分base64UrlEncode 后使用指定算法签名生成
以默认 HS256 为例,指定一个密钥(secret),就会按照如下公式生成:
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret,
)       

最后一步

算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户

工具类

工具类【普通版】

功能

1.生成令牌

2.校验令牌并返回true或fals

代码

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;

import java.util.Date;

/**
 * JWT工具类
 */
public class JWTUtil {
    //签发人
    private static final String ISS_USER = "jkw";
    //令牌过期时间(五分钟)
    private static final long TOKEN_EXPIRE_TIME = 5 * 60 * 1000;
    //秘钥(最好写的复杂一点)
    private static final String KEY = "jkw-123456";

    /**
     * 生成令牌
     *
     * @return
     */
    public static String token() {
        Date now = new Date();//时间
        Algorithm algorithm_key = Algorithm.HMAC256(KEY);//加密秘钥
        //创建JWT
        String token = JWT.create()
                //签发人
                .withIssuer(IS

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握AI写作工具:引领内容创作潮流

随着技术发展,AI技术正日益渗透到各行各业,并对内容创作领域产生了深远影响。随着AI写作工具的不断发展和普及,内容创作者们正逐渐看到了AI在提高效率、创造力和质量方面的巨大潜力。本文将探讨AI写作工具如何引领内容创作潮流,以…

vue antd table嵌套表格 左侧展开图标动态控制显示隐藏

antd a-table想要实现如以下效果&#xff0c;有子级就显示展开图标&#xff0c;没有就不显示图标&#xff1a; 话不多说&#xff0c;直接上代码&#xff1a; <template><a-table :columns"columns" :data-source"dataSource"><template #b…

最新若依项目快速上手

最新若依项目快速上手 配套视频&#xff1a;若依项目快速上手视频 1. 下载源码 官网&#xff1a;https://ruoyi.vip/ 前端 git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git后端 git clone https://gitee.com/y_project/RuoYi-Vue.git2. 数据库 创建数据库ry-vue…

JAVA后端调用OpenAI接口 实现打字机效果(SSE)

SSE SSE&#xff08;Server-Sent Events&#xff0c;服务器发送事件&#xff09;是一种基于HTTP协议的通信技术&#xff0c;它允许服务器持续地将数据推送给客户端&#xff0c;而无需客户端发起请求。这种通信方式通常用于实时性要求较高的场景&#xff0c;如实时更新、通知、或…

Linux:搭建ntp服务器

我准备两个centos7服务器 一个为主服务器连接着外网&#xff0c;并且搭建了ntp服务给其他主机同步 另外一个没有连接外网&#xff0c;通过第一台设备去同步时间 首先两个服务器都要安装ntp软件 yum -y install ntp 再把他俩的时间都改成别的 左侧的是主服务器&#xff0c;主…

【Docker篇】自定义Dockerfile的操作

文章目录 &#x1f354;镜像结构&#x1f6f8;什么是Dockerfile⭐基于Ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目&#x1f50e;使用 java:8-alpine &#x1f354;镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例&am…

JVM中对象创建过程

在JVM中对象的创建&#xff0c;我们从一个new指令开始&#xff1a; 这个过程大概图示如下&#xff1a; 虚拟机收到new指令触发。 类加载检查&#xff1a;如果类没有被类加载器加载&#xff0c;则执行类加载流程&#xff08;将class信息加载到JVM的运行时数据区的过程&#xff…

KiCad 从原理图创建或者导出原理图符号

KiCad 从原理图创建或者导出原理图符号 原理图中&#xff0c;在下那个要导出的符号上点击右键-》属性-》编辑符号 在符号编辑中选择&#xff1a;文件-》导出符号 加微信&#xff1a;jiyuyun18, 交流电子技术 留言&#xff1a;CSND 电子技术交流群&#xff0c;加入电子微信电…

如何利用生成式AI进行品牌定位调研?

在激烈的市场竞争中&#xff0c;一个明确的品牌定位能够帮助企业突出其独特性&#xff0c;吸引并保留目标消费者。品牌定位调研是企业了解自身、竞争对手以及市场需求的重要手段&#xff0c;是制定有效市场策略的基础。本文将详细介绍如何进行品牌定位调研&#xff0c;包括调研…

PyTorch学习笔记之激活函数篇(四)

4、 Leaky ReLU 函数 4.1 公式 Leaky ReLU函数的公式&#xff1a; f ( x ) { x , x > 0 λ x , x < 0 , λ ∈ ( 0 , 1 ) f(x) \begin{cases} x&,x>0 \\ \lambda x&,x<0,\lambda \in(0,1) \end{cases} f(x){xλx​,x>0,x<0,λ∈(0,1)​ Leakly R…

MySQL连接数不足导致服务异常GetConnectionTimeoutException

文章目录 场景复现解决方案一、调整连接数二、优化程序 场景复现 已经上线正常运行的项目突然很多功能无法使用&#xff0c;查看程序日志发现MySQL报错&#xff0c;异常信息: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.Ge…

分布式(计算机算法)

目录 分布式计算 分布式​编辑 分布式和集群 分布式和集群的应用场景 分布式应用场景 集群应用场景 哪种技术更优、更快、更好呢 性能 稳定性 以下概念来源于百度百科 分布式计算 分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是在两个或多个软件互相共享信息…

【ArcGISProSDK】添加异步执行时进度窗口

运行结果 代码 protected override async Task InitializeAsync(){using (ProgressorSource progressorSource new ProgressorSource("初始化...")){await QueuedTask.Run(delegate{MessageBox.Show(licenseExpirationDate.ToString());}, progressorSource.Progres…

介绍一下Spring的AOP

一、问题解析 典型回答 AOP(Aspect-Oriented Programming)&#xff0c;即面向切面编程&#xff0c;用人话说就是把公共的逻辑抽出来&#xff0c;让开发者可以更专注于业务逻辑开发。 和IOC一样&#xff0c;AOP也指的是一种思想。AOP思想是OOP&#xff08;Object-Oriented Prog…

【Java刷题篇】滑动窗口

文章目录 &#x1f4c3;滑动窗口&#x1f4dc;基本概念&#x1f4dc;核心思路 ✍最大连续1的个数 III✍水果成篮 &#x1f4c3;滑动窗口 &#x1f4dc;基本概念 滑动窗口是一种基于双指针的一种思想&#xff0c;两个指针指向的元素之间形成一个窗口。 分类&#xff1a;窗口有…

C++语言现在还有人学吗?

在当今信息爆炸的时代&#xff0c;计算机编程语言繁多&#xff0c;涌现了许多新兴的编程语言&#xff0c;如Python、JavaScript等。针对C编程语言是否还有人学的问题&#xff0c;我个人认为可以从以下几个方面进行讨论。 首先&#xff0c;C诞生于1979年&#xff0c;起初是为了开…

AI预测福彩3D第12弹【2024年3月18日预测--第3套算法重新开始计算第1次测试】

前面的第2套算法感觉效果比较差&#xff0c;与真实结果差距较大&#xff0c;因此&#xff0c;果断放弃第2套算法&#xff0c;再次进行了改进后&#xff0c;咱们从今天开始测试第3套算法。第3套算法加入了012路的权重。废话不多说了&#xff0c;直接上结果吧~ 最终&#xff0c;经…

数据驱动校园管理:山海鲸可视化软件看板搭建记

随着信息化时代的到来&#xff0c;校园管理也逐渐向数字化、可视化转型。作为一名数据分析师&#xff0c;我有幸参与了使用山海鲸可视化软件搭建校园管理可视化看板的项目&#xff0c;山海鲸可视化软件是近些年新崛起的一款可视化产品&#xff0c;支持免费可视化编辑、私有化部…

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

SolidWorks教育版 科研版 商业版区别

SolidWorks是一款功能强大的三维CAD软件&#xff0c;广泛应用于机械设计、工业设计、建筑设计等领域。SolidWorks提供了多个版本&#xff0c;以满足不同用户的需求。本文将详细介绍SolidWorks教育版、科研版与商业版的区别&#xff0c;帮助你更好地选择适合自己的版本。 首先&…