Come ottenere il token jwt da Authorization

Oct 04 2020

Sto inviando la richiesta con il token jwt in autorizzazione. Devo recuperarlo in qualche modo e ho provato in questo modo:

@GetMapping
fun getUser(@AuthenticationPrincipal jwt: Jwt<*, *>): ResponseEntity<UserDto?> {
   val allClaimsFromToken: Claims? = getAllClaimsFromToken(jwt.toString());
   val userNameFromJwtToken: Any? = allClaimsFromToken?.get("sub");
   ....
}

Sfortunatamente ottengo sempre null come variabile jwt. Potresti dirmi cosa sto facendo di sbagliato?

Risposte

ced-b Oct 05 2020 at 03:13

Probabilmente il modo più semplice per farlo sarebbe ottenere il valore dell'intestazione non elaborato e quindi analizzarlo con JJWT.

@GetMapping
fun getUser(@RequestHeader (name="Authorization") tokenEncoded: String): ResponseEntity<UserDto?> {
   Jwt myToken = Jwts.parserBuilder()    
     .setSigningKey(yourKeyHere)
     .build()
     .parseClaimsJws(tokenEncoded.removePrefix("Bearer").trim());

   // do something
}

Potresti anche cercare di utilizzare la libreria Spring per OAuth2 che automatizza un po 'di più. Oppure puoi creare un filtro che esegue l'analisi in modo da non doverlo ripetere a ogni chiamata web.

Vedi anche questo post per ulteriori idee Accesso al token JWT da un controller Spring Boot Rest . È Java, ma fondamentalmente vale lo stesso.