Как аутентифицировать конечную точку с помощью Jwt и запретить пользователям использовать не свои данные в Spring Boot WebFlux - PullRequest
0 голосов
/ 12 марта 2020

Прежде всего, я не являюсь носителем языка, поэтому я, вероятно, сделаю много ошибок (поэтому я сейчас извиняюсь).

Хорошо, давайте представим мою проблему, допустим, у меня есть простой класс RestController в java:

@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();
    }
} 

Допустим, метод входа в систему возвращает токен JWT для аутентификации моего / репозитория / {имя пользователя}. И скажем, у меня есть фильтр для проверки токена (если он действителен и другие вещи) Если я сделаю это, то обеспечу целую конечную точку Но я хочу защитить его намного больше, я хочу позволить пользователю с указанным c именем пользователя использовать эту конечную точку {username}. Как я могу это сделать? Как я могу передать этот токен в контроллер? (В данный момент он остается на фильтре).

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете использовать поле jwt "aud", которое указывает, какая аудитория вашего сервиса должна ответить: вы можете написать конечную точку или любую информацию, чтобы дифференцировать эту конечную точку.

Она указана в https://tools.ietf.org/html/rfc7519#section -4.1.3

Вы можете проанализировать токен, проверить URL-адрес и подпись и, если он неверен, вернуть другой ResponseEntity

...