Доступ к токену JWT из контроллера Spring Boot Rest - PullRequest
0 голосов
/ 27 февраля 2019

Я реализую REST API с помощью Spring Boot и защищаю его с помощью JWT и Oauth 2.

У меня нет проблем с аутентификацией и созданием токена доступа.

Когда пользовательделает запрос, я хочу получить доступ к его токену JWT из контроллера.

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth) {
    logger.info("CREDENTIALS:" + auth.getCredentials().toString());
    logger.info("PRINCIPAL:" + auth.getPrincipal().toString());
    logger.info("OAuth2Request:" + auth.getOAuth2Request());
    logger.info("UserAuthentication:" + auth.getUserAuthentication());
    return userService.findAllUsers();
}

Я пробовал что-то подобное выше, но не смог добраться до токена, я только получаю имя пользователя.Есть ли способ добиться этого в Spring Boot?

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ответ, предоставленный Карлом, должен решить вашу проблему.

В дополнение к этому ответу вы можете использовать следующий метод и получить доступ к токену в любом месте кода

public static String getToken() {
    String token = null;
    var authentication = SecurityContextHolder.getContext().getAuthentication();
    if (authentication != null) {
      token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
    }
    return token;
  }
0 голосов
/ 27 февраля 2019

Tartar,

Отправляет ли пользовательский интерфейс токен в качестве заголовка в запросе?в этом случае вы можете получить это значение, используя аннотацию @RequestHeader в своем методе

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token) 

Примечание. В этом примере «Авторизация» - это имя заголовка, содержащее токен, это может быть пользовательский заголовокимя.

Ура!

...