[英]How to authenticate endpoint using Jwt and prevent users to use not their data in Spring Boot WebFlux
首先,我不是母語人士,所以我可能會犯很多錯誤(所以我現在說對不起)。
好的,讓我們介紹一下我的問題,假設我在 Java 中有簡單的 RestController 類:
@RestController
public class UserController {
// repository autowired
@GetMapping("/repository/{username}")
public Flux<Repository> getAllUserRepositories(@PathVariable String username) {
return repositoryService.getAllUserRepositories(new User(username));
}
@PostMapping("/user/login")
public String login(@RequestBody User user) {
long now = System.currentTimeMillis();
return Jwts.builder()
.setSubject(user.getLogin())
.claim("roles", "user")
.setIssuedAt(new Date(now))
.setExpiration(new Date(now + 1000 * 60))
.signWith(SignatureAlgorithm.HS512, "secretkey").compact();
}
}
假設方法 login 返回 JWT 令牌來驗證我的 /repository/{username}。 假設我有一個過濾器來檢查令牌(如果有效,還有其他事情)。 如果我這樣做,那么我就可以保護整個端點。 但我想要更安全,我想讓具有特定用戶名的用戶使用此 {username} 端點。 我怎樣才能做到這一點? 如何將此令牌傳遞給控制器? (此時它停留在過濾器上)。
您可以使用 jwt 字段“ aud
”,它指定您的服務的哪些受眾應該響應:您可以編寫端點或任何信息來區分此端點。
它在https://tools.ietf.org/html/rfc7519#section-4.1.3 中指定
您可以解析令牌,檢查 url 和簽名,如果不正確返回不同的ResponseEntity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.