J'implémente une API REST avec Spring Boot et je la sécurise avec JWT et Oauth 2.
Je n'ai aucun problème avec l'authentification et la production d'un jeton d'accès.
Lorsqu'un utilisateur fait une demande, je souhaite accéder à son jeton JWT à partir du contrôleur.
@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();
}
J'ai essayé quelque chose comme ci-dessus mais je n'ai pas pu atteindre le jeton, je ne reçois que le nom d'utilisateur. Existe-t-il un moyen d'y parvenir dans Spring Boot?
Toute aide serait appréciée.
Tartre,
L'interface utilisateur envoie-t-elle le jeton en-tête dans la demande? si tel est le cas, vous pouvez obtenir cette valeur en utilisant l'annotation @RequestHeader dans votre méthode
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> getUsers(OAuth2Authentication auth, @RequestHeader (name="Authorization") String token)
Remarque: Pour cet exemple, "Autorisation" est le nom d'en-tête qui contient le jeton, il peut s'agir d'un nom d'en-tête personnalisé.
À votre santé!
La réponse fournie par Karl devrait résoudre votre problème.
En plus de cette réponse, vous pouvez utiliser la méthode suivante et accéder au jeton n'importe où dans le code
public static String getToken() {
String token = null;
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
token = ((OAuth2AuthenticationDetails) authentication.getDetails()).getTokenValue();
}
return token;
}