Como ya hemos visto en el artículo de Introducción a JSON Web Tokens (JWT), un token está subdivido en 3 partes:

  • Header
  • Payload
  • Signature

Vamos a crear un proyecto nuevo de Spring Boot, ya hemos creado muchos por lo que no vamos a repetir el proceso. Si no sabéis como os remito al artículo Creando un proyecto de Spring Boot.

Las dependencias del fichero pom.xml serán:

Además crearemos un controlador:

De momento simplemente tenemos un controller que devuelve un String:

Una vez tenemos el controlador perfectamente funcionando comenzamos con la creación del token.

Creando el Token JWT

Primeramente creamos el SignatureAlgorithm donde definimos el tipo de cifrado. Para posteriormente cuando creemos el Header del token poder asignárselo.

Una vez, creado el header y asignados los valores correspondientes, tenemos que crear el token en si al que le asignaremos el Header anteriormente creado.

Finalmente, compilamos (con compact) el token Jwt y lo guardamos en una variable de tipo String para que el controlador sea capaz de devolver el token cuando le realicen una petición.

Una vez lo tenemos todo listo, si nos fijamos nos indica que también debe de ser especificado el «payload» o «claims».

A modo informativo si declaramos el ‘payload’ y ‘claims’ esto también nos producirá un error:

Pues para solucionar el primer error, vamos a hacerle caso al warning que nos aparecía y vamos a añadirle por ejemplo el Payload.

Y ahora si que sí, ya tenemos lo que podría ser «nuestro primer token» por llamarlo de alguna manera.

Aunque realmente ahora que ya conocemos su estructura, podemos ver que solamente contiene el header del token JWT. Por lo que necesitamos el Header + el Payload para realizar la Signature y tener el token completo que será la siguiente parte.

Si ahora hacemos la petición nuevamente, podemos comprobar que ya tenemos el Header y el Payload. Y que tan solo nos falta firmar el token.

De hecho copiamos el resultado y lo descompilamos podemos ver que el resultado del encoded del token JWT concuerda con lo que hemos añadido anteriormente:

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJqdGkiOiIxIiwic3ViIjoid3d3LmphdmFkZXNkZTAuY29tIiwibmFtZSI6IkRhdmlkIEJlcm5hbCIsInNjb3BlIjoiYWRtaW5zIiwiaWF0IjoxNDY2Nzk2ODIyLCJleHAiOjQ2MjI0NzA0MjJ9.

Finalmente si creamos el token completo:

Podemos ver como si cogemos el token en encoded y lo pegamos en la web haciendo el decoded, podemos ver el resultado:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJqdGkiOiIxIiwic3ViIjoid3d3LmphdmFkZXNkZTAuY29tIiwibmFtZSI6IkRhdmlkIEJlcm5hbCIsInNjb3BlIjoiYWRtaW5zIiwiaWF0IjoxNDY2Nzk2ODIyLCJleHAiOjQ2MjI0NzA0MjJ9.LXh6Pf-8bv92NpHT3gGL4xgqNBpSRQ1azIhHa9nl_z0

Es muy importante que en la signature quitemos la clave que hay en este cuadradito ya que no hemos añadido ninguna nosotros en el token y sino la firma sería diferente y al no coincidir nos mostraría invalid signature como en el ejemplo anterior.

Conclusión

Bueno hasta ahora ya hemos visto que es un token, cual es su estructura y como crear un token. En próximas lecciones profundizaremos mucho más sobre el tema viendo algunas de sus utilidades con más detalle. ¡Un saludo javer@s!