Я реализую 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?
Любая помощь будет оценена по достоинству.
татарин,
Пользовательский интерфейс отправляет токен в качестве заголовка в запросе? если это так, вы можете получить это значение, используя аннотацию @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;
}
@OsamaSbieh, можете ли вы предоставить ссылку, показывающую, что последняя версия (2.4.0.RELEASE) устарела? Глядя на репозиторий Maven и углубляясь в JAR, это не похоже на правду. Только служба ImplicitGrantService устарела, поскольку была признана небезопасной и перерабатывается для будущего выпуска, чтобы типы неявных грантов могли быть правильно структурированы и учтены.
Просто чтобы пролить свет, да, это устарело github.com/spring-projects/spring-security-oauth/blob/…
OAuth2AuthenticationDetails устарел