payaramicro
  • Introduction
  • Capitulo 1
    • Links
    • Ejecutar un war
    • Crear un Uberjar
    • Pool de Conexiones
    • Payara micro embebido
    • Archivo log
    • Ejecutar en un puerto
    • Parametros ejecucion
    • Crear Realm
    • Construirlo con Docker
  • Generar proyecto desde linea de comandos
  • Optimizar Payara Micro con Java 11
    • Inicio rapido
  • PayaraMicro con JDBC realm
  • Capitulo II Payara Micro embebido
    • Maven
    • Payara micro con NetBeans
  • Payara Micro con NetBeans
  • RemoteCDIEvents
  • Capitulo III Payara Micro con SSL
    • Untitled
    • Pasos
  • Payara Micro Embebido
  • Microservices
    • Microservices
    • Ejemplos de Microservicios
    • Payara Micro ESB Timer
  • Seguridad
    • Microservicios con IdentityStore
      • Microservicios con IdentityStore
        • Cliente
      • Referencias
  • Payara con JWT/ MP Lemon Builder
    • Crear Realms
    • mp-lemon-builder
    • jwt-provider
    • Cliente jwt
    • Cliente Java JWT
    • Libreria Para JWT
      • Java Cliente JWT
  • Certificado Digital
  • AutoComplete con Microservices
    • Autocomplete con Microservices con SQL Server
  • Envio Archivos
    • Enviar Archivos por JAX-RS
      • FileUpload archivos mediante JAX-RS
      • Enviar archivo .zip, encriptado.
Powered by GitBook
On this page
  • Archivo microprofile-config.properties
  • JAXRSConfiguration.java
  • PingResources.java
  • en WEB-INF
  • Construimos la aplicación y hacemos el deployed en Payara
  • Usaremos la cabecera generada para el user1

Was this helpful?

  1. Payara con JWT/ MP Lemon Builder

Cliente jwt

Previousjwt-providerNextCliente Java JWT

Last updated 5 years ago

Was this helpful?

Abrimos la aplicación: web-app generada

Archivo microprofile-config.properties

Contiene el public key generado

mp.jwt.verify.publickey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAprklfylWG4UCFvI4TIXsHB3dZlig1zlsOZWqEqrD3T9dV+PA5XKqL3sujpAiXRZM2fR7Qc8V9VcnuRvph+ihNs77imIKAH29+gPoB4Aq48iiUPWU5B7AzmJqLVgdYMuzYPy1emfXyk2oYXoHnc+6eGJSHidb5KqnM3e662ZTDTahXAS1cQKvYXqGxExaI+DSHEwTglGN+n4suUkW4Vt0KOYkN0gFPCf4wKbXZZfiosF59cjAQ/YVE2EwXQ8KCDGpTh3Uy4vkz+wX3cmEOAzPU0SddFXr3u5Zm3xf1BCC1EqLsGqbx2vOOeBNW4lOrRX2HpgBjM+ZYS0ZjtOwC+tc/QIDAQAB
mp.jwt.verify.issuer=http://apuntesdejava.com

JAXRSConfiguration.java

Contiene la autentificaciòn y roles

import javax.annotation.security.DeclareRoles;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import org.eclipse.microprofile.auth.LoginConfig;

@ApplicationPath("resources")
@LoginConfig(authMethod = "MP-JWT")
@DeclareRoles({"user_web","user_mobile"})
public class JAXRSConfiguration extends Application {

}

PingResources.java

Microservicio con autenticación por JWT

import java.security.Principal;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
import org.eclipse.microprofile.jwt.JsonWebToken;

@Path("ping")
@Produces(TEXT_PLAIN)
public class PingResource {

    @Inject
    private Principal principal;

    @Inject
    private JsonWebToken jwt;

    @GET
    @PermitAll
    @Path("all")
    public String ping() {
        return principal.getName() + jwt.getGroups();
    }

    @GET
    @RolesAllowed({"user_web","user_mobile"})
    @Path("secure")
    public String pingSecure() {
        return principal.getName() + jwt.getGroups();
    }

}

en WEB-INF

El archivo beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
       bean-discovery-mode="all" version="2.0">
</beans>

Construimos la aplicación y hacemos el deployed en Payara

Aparece en la lista de aplicaciones

Ahora consumimos el recurso @Path("all"), recuerde que esta definido sin restricciones de acceso @PermitAll

@GET
    @PermitAll
    @Path("all")
    public String ping() {
        return principal.getName() + jwt.getGroups();
    }

Desde consola ejecutamos

 http :8080/web-app/resources/ping/all

Ahora vamos a consumir secure. Este solo permite el acceso de los usuarios con roles user_web o user_mobile

 @GET
    @RolesAllowed({"user_web","user_mobile"})
    @Path("secure")
    public String pingSecure() {
        return principal.getName() + jwt.getGroups();
    }

Ejecutar desde consola

 http :8080/web-app/resources/ping/secure

envía el mensaje HTTP/1.1 401 Unauthorized, ya que tenemos que especificar los roles user_web o user_mobile.

Usaremos la cabecera generada para el user1

Recuerde que la generamos de la siguiente manera

http --form :8080/jwt-provider/auth username=user1 password=user1

genera

copiamos el código

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJraWQiOiJteS1oZWFkZXIta2V5IiwiYWxnIjoiUlMyNTYifQ.eyJpYXQiOjE1NzYxNzc1NDQsImV4cCI6MTU3NjI3NzU0NCwic3ViIjoidXNlcjEiLCJhdWQiOiJhdWRpZW5jZSIsImdyb3VwcyI6WyJ1c2VyX3dlYiJdLCJqdGkiOiI3MjhlODgyMS0zZDVhLTRmN2ItOTg1Ni03Y2ZjYjY4MjU4Y2YiLCJpc3MiOiJodHRwOi8vYXB1bnRlc2RlamF2YS5jb20ifQ.I92UBX0BmkOhFtn6h9Oo_1tpLd0vQZkkHWac2XlVjECXWl9ihzG1b13U_RzvtHzJfHJRJIyhHkBG0tc8bdckuBkkkwl1ydsgcJEHI5PsV_elIKOY3WXjWl4J8vacb-b7-5gQqlHz1LbrlBwIQ42YxGqhLxl64rFTz8NmuDsqr4167hyj57_puJszuXTIJYbmK-hATzibPdmAZOfDjfuxMjTvxanvkCqm7KK0w5Zl-0xOwDQLxzq82jdQvMDZlpVDV438HBgM3_fjKppQ8QV7o9VyGE5L4wOjqpiFQp4pDkte3h3wrL8OQHdIvK089Ji8_qoeFkpbvQ9DisXBF1omMw

En la prueba para el security incluimos entre comillas las cabecera

http :8080/web-app/resources/ping/secure "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJraWQiOiJteS1oZWFkZXIta2V5IiwiYWxnIjoiUlMyNTYifQ.eyJpYXQiOjE1NzYxNzc1NDQsImV4cCI6MTU3NjI3NzU0NCwic3ViIjoidXNlcjEiLCJhdWQiOiJhdWRpZW5jZSIsImdyb3VwcyI6WyJ1c2VyX3dlYiJdLCJqdGkiOiI3MjhlODgyMS0zZDVhLTRmN2ItOTg1Ni03Y2ZjYjY4MjU4Y2YiLCJpc3MiOiJodHRwOi8vYXB1bnRlc2RlamF2YS5jb20ifQ.I92UBX0BmkOhFtn6h9Oo_1tpLd0vQZkkHWac2XlVjECXWl9ihzG1b13U_RzvtHzJfHJRJIyhHkBG0tc8bdckuBkkkwl1ydsgcJEHI5PsV_elIKOY3WXjWl4J8vacb-b7-5gQqlHz1LbrlBwIQ42YxGqhLxl64rFTz8NmuDsqr4167hyj57_puJszuXTIJYbmK-hATzibPdmAZOfDjfuxMjTvxanvkCqm7KK0w5Zl-0xOwDQLxzq82jdQvMDZlpVDV438HBgM3_fjKppQ8QV7o9VyGE5L4wOjqpiFQp4pDkte3h3wrL8OQHdIvK089Ji8_qoeFkpbvQ9DisXBF1omMw"

y obtenemos la informacion del token del usuario