簡體   English   中英

如何使用 Jwt 對端點進行身份驗證並防止用戶在 Spring Boot WebFlux 中使用他們的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM