jwt相关问题及应用

关于jwt做登陆通过Response.HttpContext.User.Identity.Name获取jwt存的用户数据为null jwt登录验证获取Response.HttpContext.User.Identity.Name为null的情况 阅读详情

①、jwt出现的原因及工作原理

②、jwt工具类介绍,三种场景

③、jwt与vuex配合在SPA项目中的应用

1. JWT是什么

==========

JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案

2. 为什么使用JWT

===============

JWT的精髓在于:“去中心化”,数据是保存在客户端的。

3. JWT的工作原理

===============

①. 是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,示例如下:

{“UserName”: “Chongchong”,“Role”: “Admin”,“Expire”: “2018-08-08 20:15:56”}

②. 之后,当用户与服务器通信时,客户在请求中发回JSON对象

③. 为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证

![](https://img-blog.csdnimg.cn/c51ad41cd12a46bdb321915c97e318be.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6IC 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 B5rGk5aeG55-l5LmO,size_20,color_FFFFFF,t_70,g_se,x_16)

4. JWT组成

===================================================================================================================================================================================================================

一个JWT实际上就是一个字符串,它由三部分组成:头部(Header)、载荷(Payload)与签名(signature)

JWT结构原理图:

JWT实际结构:eyJhbGciOiJIUzI1NiJ9.

eyJzdWIiOiJ7fSIsImlzcyI6InpraW5nIiwiZXhwIjoxNTYyODUwMjM3LCJpYXQiOjE1NjI4NDg0MzcsImp0aSI6ImM5OWEyMzRmMDc4NzQyZWE4YjlmYThlYmYzY2VhNjBlIiwidXNlcm5hbWUiOiJ6c3MifQ.

WUfqhFTeGzUZCpCfz5eeEpBXBZ8-lYg1htp-t7wD3I4

它是一个很长的字符串,中间用点(.)分隔成三个部分。

注意,JWT 内部是没有换行的,这里只是为了便于展示,将它写成了几行。

写成一行,就是下面的样子:Header.Payload.Signature

五,JWT的验证过程

==========

在验证一个JWT的时候,签名认证是每个实现库都会自动做的,但是payload的认证是由使用者来决定的。因为JWT里面可能会包含一个自定义claim,所以它不会自动去验证这些claim

它验证的方法其实很简单,只要把header做base64url解码,就能知道JWT用的什么算法做的签名,然后用这个算法,再次用同样的逻辑对header和payload做一次签名,并比较这个签名是否与JWT本身包含的第三个部分的串是否完全相同,只要不同,就可以认为这个JWT是一个被篡改过的串,自然就属于验证失败了。

接收方生成签名的时候必须使用跟JWT发送方相同的密钥

六,JWT在spa项目中的使用

================

项目中 JwtFilter 类

package com.zking.vue.util;

import java.io.IOException;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import io.jsonwebtoken.Claims;

/**

    • JWT验证过滤器,配置顺序 :CorsFilte–>JwtFilter–>struts2中央控制器
  • @author Administrator

*/

public class JwtFilter implements Filter {

// 排除的URL,一般为登陆的URL(请改成自己登陆的URL)

private static String EXCLUDE = “^/vue/userAction_login\.action?.*$”;

private static Pattern PATTERN = Pattern.compile(EXCLUDE);

private boolean OFF = false;// true关闭jwt令牌验证功能

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void destroy() {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse resp = (HttpServletResponse) response;

String path = req.getServletPath();

if (OFF || isExcludeUrl(path)) {// 登陆直接放行

chain.doFilter(request, response);

return;

}

// 从客户端请求头中获得令牌并验证

String jwt = req.getHeader(JwtUtils.JWT_HEADER_KEY);

Claims claims = this.validateJwtToken(jwt);

if (null == claims) {

// resp.setCharacterEncoding(“UTF-8”);

resp.sendError(403, “JWT令牌已过期或已失效”);

return;

} else {

String newJwt = JwtUtils.copyJwt(jwt, JwtUtils.JWT_WEB_TTL);

resp.setHeader(JwtUtils.JWT_HEADER_KEY, newJwt);

chain.doFilter(request, response);

}

}

/**

  • 验证jwt令牌,验证通过返回声明(包括公有和私有),返回null则表示验证失败

*/

private Claims validateJwtToken(String jwt) {

Claims claims = null;

try {

if (null != jwt) {

claims = JwtUtils.parseJwt(jwt);

}

} catch (Exception e) {

e.printStackTrace();

}

return claims;

}

/**

  • 是否为排除的URL

  • @param path

  • @return

*/

private boolean isExcludeUrl(String path) {

Matcher matcher = PATTERN.matcher(path);

return matcher.matches();

}

// public static void main(String[] args) {

// String path = “/sys/userAction_doLogin.action?username=zs&password=123”;

// Matcher matcher = PATTERN.matcher(path);

// boolean b = matcher.matches();

// System.out.println(b);

// }

}

JwtUtils 类

package com.zking.vue.util;

import java.util.Date;

import java.util.Map;

import java.util.UUID;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

import io.jsonwebtoken.Claims;

import io.jsonwebtoken.JwtBuilder;

import io.jsonwebtoken.Jwts;

import io.jsonwebtoken.SignatureAlgorithm;

/**

  • JWT验证过滤器:配置顺序 CorsFilte->JwtUtilsr–>StrutsPrepareAndExecuteFilter

*/

public class JwtUtils {

/**

  • JWT_WEB_TTL:WEBAPP应用中token的有效时间,默认30分钟

*/

public static final long JWT_WEB_TTL = 30 * 60 * 1000;

/**

  • 将jwt令牌保存到header中的key

*/

public static final String JWT_HEADER_KEY = “jwt”;

// 指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。

private static final SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithm.HS256;

private static final String JWT_SECRET = “f356cdce935c42328ad2001d7e9552a3”;// JWT密匙

private static final SecretKey JWT_KEY;// 使用JWT密匙生成的加密key

static {

byte[] encodedKey = Base64.decodeBase64(JWT_SECRET);

JWT_KEY = new SecretKeySpec(encodedKey, 0, encodedKey.length, “AES”);

}

JWT用于长时间保存用户认证信息 JWT用于长时间保存用户认证的信息 阅读详情

相关推荐

ctf.show之JWT

JWT即Json Web Token的缩写,顾名思义,是Token的一种。它常被用来在向服务器发起请求时用作身份认证。使用JWT作为身份认证的优势在于: 它不需要在服务器去保留用户的认证信息。仅需要对该Token正确性进行校验即可,这就意味着基于token认证机制的应用,不需要去考虑用户在哪一台服务器登录了,为应用的扩展提供了便利。然而新技术带来便利的同时也会带来新的安全问题,如果JWT本身安全存在问题,那么整个身份认证机制就会得不到保障。

weixin_68477635的博客 357

JWT解析为空

添加新JWT依赖并注释掉原来的(pom.xml文件130行)解决方法:创建数据库,并导入数据表和数据.从第85行开始:注意修改成下面代码。

2301_76862744的博客 1214

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.10和OpenCV4.2.0等。VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

zardforever123的博客 2万+

JWT校验

1. 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。 通俗说:\color{#FF3030}{通俗说:}通俗说: 在数据传输过程中还可

Monster 2311

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当实验数据不符合正态分布时,该非参数检验是分析两因素设计(包括主效应和交互效应)的有效工具。文章从原理、环境配置、数据导入、核心代码到结果解读与报告撰写,提供了完整的实战指南,并附有常见的避坑建议。

weixin_29061465的博客 398

手把手教你安装 Vivado2022.2(附安装包)

Vivado 2022.2版本与之前的版本相比,具有以下几个显著的优势:电源设计管理器(PDM):Vivado 2022.2引入了全新的电源设计管理器(PDM),这是一个下一代功耗评估平台,为Versal® 和 Kria™ SOM提供了准确一致的功耗估计能力。PDM是Versal产品家族的首选功耗评估工具,为Versal ACAP硬IP块提供增强向导,简化从XPE向PDM的迁移,帮助用户获得准确的功耗评估。

dpwkj的博客 2万+

jwt相关问题及应用,web开发流程

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】前端开发知识点,真正体系化!**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)[外链图片转存中…(img-UPFpy1ys-1711703706005)]

m0_60575487的博客 329

【AI知识点】启发式算法(Heuristic Algorithms)

启发式算法(Heuristic Algorithms) 是一种基于经验、直觉和局部优化的求解问题的算法,尤其适用于解决计算复杂度高、规模庞大的问题。它们通过简化问题、局部搜索和快速近似,提供了一种在短时间内获得“足够好”解的途径。虽然启发式算法无法保证全局最优解,但它们在实际应用中广泛使用,特别是在优化问题、任务调度和机器学习等领域。

AI完全体 3033

应用安全系列之三十九:JWT 相关安全问题以及最佳实践

本文主要简单介绍JWT的功能,以及常见的安全问题,并针对相关的安全问题提供一些有针对性的解决方案。 希望对JWT的使用者和实现者能够有所帮助。

jimmyleeee的专栏 965

详细解释SigLIP的原理,为什么有些多模态模型喜欢用他?怎么应用于机器人控制呢

详细解释SigLIP的原理,为什么有些多模态模型喜欢用他?怎么应用于机器人控制呢。

具身机器人和通用AI 1233

Vue2 - 最新实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)vue天地图切换视图显示改成卫星风格,切换地图图层完整代码

vue2,nuxt2,天地图,视图,卫星,地图类型切换,vue天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,vue中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue安装集成天地图详细示例源码,切换地图的样式,在天地图中如何将地图的类型随意更换,提供多种视图模式用户自由点击更换,VUE引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue2卫星天地图,能改地图的显示方式,图层类型

🏆 前端领域优质创作者 4143

如何使JWT失效

关于使JWT失效问题问题解决思路 最近在弄app接口,使用到JWT来管理token,关于JWT的优点,已经有很多博客介绍了,这里就不啰嗦了,讲一下我碰到的问题及解决方法. 问题 旧token不在服务器端存储,如何使其失效? 解决思路 用户表维护一个登录时间字段lastLoginDate,每次登录,退出,修改密码都更新此字段, 然后jwt生成时有个签发时间,根据签发时间比对登录时间,如果签发时间...

T1058253468的博客 9434

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 959

转载:Laravel中应用JWT

JWT-Json Web Token,一种基于json格式的开放标准,常常被用作替代cookie的认证方式,特别适合前后端分离的WEB应用,以及api接口。今天就讲讲如何在Laravel应用中使用JWT,虽然网上找到的Laravel集成JWT的方法,不过要么就坑点太多,要么就有诸多限制(比如要验证的模型有多个怎么配置)。实验环境Laravel 5.2+PHP 5.5+tymon/jwt-auth ...

weixin_42390015的博客 605

某招标公告网和vcaptcha验证码识别逆向

本文分析了某验证码系统的加密流程及破解思路。首先通过反混淆技术定位到加密函数,拆解了包含指纹函数、环境参数等组成的加密字符串。研究发现验证码生成涉及canvas指纹、环境检测等反爬机制,可通过模拟浏览器环境绕过。验证过程需要解密图片顺序,通过work2.js计算还原图片位置,再结合滑动轨迹、时间等参数生成验证请求。文章仅提供技术研究思路,强调需遵守法律法规,严禁非法破解信息系统。完整流程包括环境模拟、加密参数还原、图片处理和轨迹生成等步骤,成功率较高。

码王吴彦祖的博客 581

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JWT(Json WEB Token)生成以及与session的区别

什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接...

我的目标是CEO,最近小目标是项目架构师! 920

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【技术博客】JWT的认证机制Django项目中应用

开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了。我们认为这样的经验是有必要记录下来的,因此就有了【技术博客】。 JWT的认证机制Django项目中应用 这篇技术博客基于软件工程课程的VisualPytorch之上。本文小部分参考了https://jwt.io/introduction/ 前言-JWT是什么,为什么用JWT 在做绝大部分数据库系统时(网站、小程序)...

weixin_33726313的博客 135

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

一篇文章读懂JWT高频面试题!

JWT(JSON Web Token)是一种轻量级的跨域身份验证解决方案,以 JSON 格式封装用户身份信息,通过数字签名保证信息不可篡改,可在服务间安全传递。

2303_80799640的博客 450

JWT安全漏洞以及常见攻击方式

随着web应用的日渐复杂化,某些场景下,仅使用Cookie、Session等常见的身份鉴别方式无法满足业务的需要,JWT也就应运而生,JWT可以有效的解决分布式场景下的身份鉴别问题,并且会规避掉一些安全问题,如CORS跨域漏洞,CSRF漏洞等。JWT即Json Web Token的缩写,顾名思义,是Token的一种。它常被用来在向服务器发起请求时用作身份认证。使用JWT作为身份认证的优势在于:它不需要在服务端去保留用户的认证信息。

1万+
上一篇: js常用正则 验证数字正则
下一篇: LeetCode - Medium - 450
宇小哥
博客等级 码龄5年 4粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值