Доступ к токену JWT из контроллера Spring Boot Rest

Я реализую 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?

Любая помощь будет оценена по достоинству.

8
0
23 696
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

татарин,

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

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

Примечание. В этом примере Authorization — это имя заголовка, содержащего токен, это может быть пользовательское имя заголовка.

Ваше здоровье!

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

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

public static String getToken() {
    String token = null;
    var authentication = SecurityContextHolder.getContext().getAuthentication();
    if (authentication != null) {
      token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
    }
    return token;
  }

OAuth2AuthenticationDetails устарел

Osama Sbieh 24.12.2019 07:45

@OsamaSbieh, можете ли вы предоставить ссылку, показывающую, что последняя версия (2.4.0.RELEASE) устарела? Глядя на репозиторий Maven и углубляясь в JAR, это не похоже на правду. Только служба ImplicitGrantService устарела, поскольку была признана небезопасной и перерабатывается для будущего выпуска, чтобы типы неявных грантов могли быть правильно структурированы и учтены.

Blake Neal 11.02.2020 23:35

Просто чтобы пролить свет, да, это устарело github.com/spring-projects/spring-security-oauth/blob/…

Javi Vazquez 10.01.2021 12:35

Другие вопросы по теме