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
- 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.
- Java 8+ que puedes bajar de https://adoptopenjdk.net/
- 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
0 comentarios:
Publicar un comentario