【JavaEE安全】Spring Boot 安全实战:JWT 身份鉴权与打包部署

📅 发布时间:2026/7/15 15:04:33 👁️ 浏览次数:
【JavaEE安全】Spring Boot 安全实战:JWT 身份鉴权与打包部署
警告以下内容仅用于安全研究与授权测试未经许可的攻击行为属于违法行为。一、JWT 身份鉴权原理与实战1.1 JWT 结构与工作流JWTJSON Web Token是一种用于身份验证的开放标准它将用户信息编码为 JSON 对象并通过数字签名保证其真实性和完整性。JWT 三部分组成Header头部描述签名算法如 HS256和令牌类型。Payload负载包含需要传递的用户数据如 userid、username这些信息是 Base64 编码的并非加密。Signature签名使用服务器密钥对 Header 和 Payload 进行签名用于验证令牌的完整性和来源。典型工作流用户通过用户名/密码登录。服务器验证凭据后使用密钥生成 JWT 并返回给客户端。客户端在后续请求的Authorization头中携带 JWT。服务器验证 JWT 签名提取用户信息并授权访问。1.2 Spring Boot 集成 JWT依赖引入在pom.xml中添加 JWT 库dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.0/version/dependency创建与签名 JWT// 生成 JWTStringcreateJWT(Stringid,Stringuser,Stringpass){MapString,ObjectheadernewHashMap();header.put(alg,HS256);header.put(typ,JWT);returnJWT.create().withHeader(header).withClaim(userid,id).withClaim(username,user)// .withClaim(password, pass) // 实战中禁止将密码放入 Payload.sign(Algorithm.HMAC256(xiaodisec));// 使用密钥签名}解析与验证 JWT// 解析并验证 JWTMapString,ObjectparseJWT(Stringjwtdata){// 构建验证器使用相同的密钥JWTVerifierverifierJWT.require(Algorithm.HMAC256(xiaodisec)).build();DecodedJWTjwtverifier.verify(jwtdata);// 提取 Payload 中的信息MapString,ObjectuserInfonewHashMap();userInfo.put(userid,jwt.getClaim(userid).asInt());userInfo.put(username,jwt.getClaim(username).asString());returnuserInfo;}1.3 安全风险密钥泄露若签名密钥如xiaodisec被攻击者获取他们可以伪造任意 JWT绕过身份验证。敏感信息暴露Payload 仅为 Base64 编码并非加密。切勿将密码等敏感信息放入 Payload。算法混淆攻击攻击者可将alg字段设为none诱导服务器不验证签名。二、Spring Boot 打包部署JAR vs WAR2.1 JAR 包部署推荐Spring Boot 默认将项目打包成可执行的 JAR 文件内置了 Tomcat 等 Servlet 容器开箱即用。打包与运行打包使用 Maven 命令mvn clean package在target目录生成xxx.jar。运行直接使用 JDK 运行java-jarxxx.jar或后台运行nohupjava-jarxxx.jarlog.out212.2 WAR 包部署当需要部署到独立的 Tomcat 服务器时需将项目打包成 WAR 文件。配置步骤修改pom.xmlpackagingwar/packaging!-- 排除内置 Tomcat --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdscopeprovided/scope/dependency改造启动类继承SpringBootServletInitializer以适配外部 TomcatSpringBootApplicationpublicclassApplicationextendsSpringBootServletInitializer{OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderbuilder){returnbuilder.sources(Application.class);}publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}部署使用mvn clean package生成xxx.war。将 WAR 文件放入 Tomcat 的webapps目录。启动 Tomcat服务器会自动解压并部署应用。2.3 源码安全JavaEE 项目部署的是编译后的字节码.class文件而非源码。即使字节码文件泄露攻击者也需要通过反编译才能获取近似的源码增加了攻击成本。三、总结与实战要点JWT是无状态认证的利器但密钥管理和 Payload 内容是安全的核心。JAR 包部署简单、易于容器化是微服务架构的首选。WAR 包适用于需要与传统 Tomcat 集群集成的场景。在渗透测试中JWT 密钥泄露和算法篡改是常见的攻击点而错误的部署配置如暴露调试端口则是另一个重要风险面。参考链接JWT 安全问题深度分析https://auth0.com/blog/a-look-at-the-latest-draft-for-jwt-bcp/Spring Boot 打包排错https://blog.csdn.net/Mrzhuangr/article/details/124731024