目录
SpringBoot-身份鉴权-JWT技术
创建项目引入依赖
引入依赖:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
项目目录如下:
创建JWT并配置JWT,对应目录下创建JwtController.java
package cn.xiaodi.testjwt.demos.web;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class JwtController {
//模拟用户的jwt身份创建 数据的jwt加密
@PostMapping("/jwtcreate")
@ResponseBody
public static String main(Integer id,String user,String pass) {
String jwttoken = JWT.create()
//设置创建的header部分
//.withHeader()
//设置创建的payload部分
.withClaim("userid", id)
.withClaim("username", user)
.withClaim("password", pass)
//设置时效(JWT过期时间)
//.withExpiresAt()
//创建设置的signature部分 算法和密匙
.sign(Algorithm.HMAC256("xiaodisec"));
System.out.println(jwttoken);
return jwttoken;
}
//模拟JWT身份的检测 jwt数据解密
@PostMapping("/jwtcheck")
@ResponseBody
public static String jwtcheck(String jwtdata){
//String jwtdata="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6ImExMjM0NTYiLCJ1c2VyaWQiOjEsInVzZXJuYW1lIjoiYWRtaW4ifQ.nkMIxHJKyGAHa3aDtTAy5_9j51yWDTQHEL8n-dqE33w";
//构建解密注册
JWTVerifier jwt = JWT.require(Algorithm.HMAC256("xiaodisec")).build();
//解密注册数据
DecodedJWT verify = jwt.verify(jwtdata);
//提取注册解密数据 payload部分
Integer userid = verify.getClaim("userid").asInt();
String username=verify.getClaim("username").asString();
String password=verify.getClaim("password").asString();
System.out.println(userid+username+password);
return "admin page";
// if(username.equals("admin")){
// return "admin";
// }else {
// return "gay?";
// }
//攻击者要模拟使用xiaodi用户去登录
//提取header部分
//verify.getHeader();
//提取sign签名部分
//verify.getSignature();
}
}
配置前端提交数据访问客户端页面,在resources→static→index.html创建如下的前端页面
<html>
<body>
<h1>hello word!!!</h1>
<p>this is a html page</p>
<form action="../jwtcreate" method="post">
id:<input type="text" name="id"><br>
user:<input type="text" name="user"><br>
pass:<input type="text" name="pass"><br>
<input type="submit" value="create">
</form>
<form action="../jwtcheck" method="post">
jwtdata:<input type="text" name="jwtdata"><br>
<input type="submit" value="check">
</form>
</body>
</html>
对应输入id,用户名,密码,点击创建得到token
在官网进行解密,在页面对应输入对应jwtdata,进行解密
跳转至解密成功页面,回显admin page