我已经获得了一个Spring Boot Web API项目。有一个flutter应用程序,它将作为请求发送jwt令牌,并且api必须从有效负载中获取“票证”值,然后检查数据库并发送所需的数据。我完全是这个领域的新手,但我别无选择,只能完成它。
我想通过仅接受令牌并尝试对其进行解码并获得“票证”值来简化此过程。但是我无法这样做,因为我一开始就无法获得令牌。 身份验证是由其他一些api完成的,它向flutter应用程序提供了jwt令牌。然后flutter应用程序将在任何请求中将该令牌发送给我的api。我有一个包含所需数据的示例数据库,并且必须使用数据库中的“票证”(充当用户名)来解决请求,并将提供数据。我不必执行任何身份验证部分-我只需要从请求中提取令牌-对其进行解码并获得“票证”值,就必须搜索数据库并提供数据。
reuest : localhost:8080/persons?access_token=eyJhbGciOiJIUzUxMiJ9.eyJ0aWNrZXQiOiJzdmxhZGFAZ21haWwuY29tIiwic2NvcGVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1BSRU1JVU1fTUVNQkVSIl0sImlzcyI6Imh0dHA6Ly9zdmxhZGEuY29tIiwiaWF0IjoxNDcyMzkwMDY1LCJleHAiOjE0NzIzOTA5NjV9.uaHqDrTNnn5TAljcWRYac9ifJJv5NR5cdn7id2xVCAKLD37_pY62jPlk70XtwqgSar03n2qEgzWyTdWXRcnsgQ
{{1}}
代码不是必需的,我只是想学习它是如何工作的。 YouTube中有很多视频,但是它们都集中在我不需要执行的身份验证上,并且都没有显示如何处理来自应用程序的请求。任何资源也将有很大的帮助。谢谢。
答案 0 :(得分:0)
reuest : localhost:8080/persons?access_token=eyJhbGciOiJIUzUxMiJ9.eyJ0aWNrZXQiOiJzdmxhZGFAZ21haWwuY29tIiwic2NvcGVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1BSRU1JVU1fTUVNQkVSIl0sImlzcyI6Imh0dHA6Ly9zdmxhZGEuY29tIiwiaWF0IjoxNDcyMzkwMDY1LCJleHAiOjE0NzIzOTA5NjV9.uaHqDrTNnn5TAljcWRYac9ifJJv5NR5cdn7id2xVCAKLD37_pY62jPlk70XtwqgSar03n2qEgzWyTdWXRcnsgQ
根据上述要求,您可以如下设计控制器:
@GetMapping("/persons")
public ResponseEntity loadPersons(@RequestParam("access_token") String access_token,HttpServletRequest request){
//Here you can play with the token now
//you can also get the token if it is coming with request header as follows :
String token =request.getHeader("access_token");//replace with the specific key
}
例如
public boolean isValidJWTToken(String jwtToken){
boolean isValid = true;
try {
Jwts.parser().setSigningKey(generateKey()).parseClaimsJws(jwtToken);
} catch (Exception e) {
isValid = false;
}
return isValid;
}
private Key generateKey() {
byte[] keyBytes=environment.getProperty("auth.jwt.secret.key").getBytes();
return new SecretKeySpec(keyBytes, 0,keyBytes.length,environment.getProperty("auth.jwt.secret.algo"));
}
JWT令牌包含3个部分。
1. HEADER:ALGORITHM & TOKEN TYPE
2. PAYLOAD:DATA
3. SIGNATURE
以上三个部分都是您的业务驱动力。因此,您可以更好地知道哪种是用于编码的算法。因此,您可以进行解码。