Creando Tokens con Microprofile JWT y JDBC Realm


 

En estos ultimos meses del año he empezado con mi equipo a trabajar con Micprofile, Payara, JakartaEE y la verdad todo es mas minimalista y funciona muy bien. 

Como necesitaba un proyecto que me proveea tokens con lo anterior mencionado, revisé el gran articulo de Victor Orozco (@tuxtor) https://vorozco.com/blog/2019/2019-10-02-MicroProfile-JWT-Token-Provider-Servlet.html para no empezar desde cero y usar JDBC Realm (mi aporte).

Código fuente: https://github.com/joedayz/microjwt-provider


Requisitos

  1. Tener un Payara Server instalado. Yo voy  a usar el Payara Server que nos provee Jelastic como PAAS , pero, tu puedes bajarte e instalar el payara en tu maquina. 
  2. Java 8+  que puedes bajar de https://adoptopenjdk.net/
  3. Seguir el articulo de Victor para crear la llave privada y llave pública. 



4. Agregar unas dependencias para Logging. Muy necesario si se presentan problemas.







Pasos para trabajar con un JDBC Realm


1. Agregar un web.xml y configurar el realm, más, los roles que vamos a utilizar.



La ubicación del web.xml es en la carpeta webapp:



2. En el archivo glassfish-web.xml tambien agregamos los roles que vamos a usar:





Configurando Logging  al proyecto


1. Crear un LoggerProducer para poder luego inyectar el Logger donde lo necesitemos.





Donde necesites hacer Logging, solo inyectas el Logger:



Generando el Token

1. El proyecto se va a parecer mucho al original, yo solo he cambiado la clase TokenProviderResource para que use el jdbc realm de esta manera:





2. Un BaseResponse para avisar a los clientes de este servicio si hubo Exito o no con una estructura personalizada.





Creando el Realm en Payara Server

1. Antes de crear un Realm tenemos que tener la conexión a la BD lista. Para eso vamos a crear un JDBC Connection Pool para Postgres.








Las 2 tablas son como se muestra a continuación:






2. Luego creamos el JDBC Resource




3. Finalmente, vamos a Configurations -> server-config -> Security -> Realms para crear el JDBC Realm:




4.  Creamos el JDBC Realm con estos datos:



Realm Name: ecommerce  (Usado en la linea 9 del web.xml)
Class Name: com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm

JAAS Context: jdbcRealm
JNDI:  jdbc/ecommerce  (JDBC Resource)
User Table: usuario
User Name Column: correo
Password Column: contrasenia
Group Table: usuario_role
Group Table User Name Column:  correo
Group Name Column: role_id
Digest Algorithm: SHA-256
Encoding: Hex
Charset: UTF-8


Probando con Postman


1. Probamos con Postman y listo



¿Qué se viene luego de esto?


En un próximo artículo usaremos un proyecto que pueda usar estos token generados y tendremos la figura completa para nuestro backend que puede ser usado por aplicaciones SPA hechas con Angular o aplicaciones móviles como Android, IOS, Flutter, etc.


Enjoy!

Joe








Share:

0 comentarios:

Publicar un comentario