Cliente jwt

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

Last updated