# Cliente jwt

Abrimos la aplicación: web-app generada

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvuUPj3PZqljeKiINFk%2F-LvuV6grNsel2XC1vkKb%2Fre.png?alt=media\&token=853bfc45-33b5-4b69-b0da-c74539c75d67)

### 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

```java
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

```java
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&#x20;

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvuViOv42_gIPfNRGkT%2F-LvuVzK077KhO4VwZy3d%2Fd.png?alt=media\&token=4b4271ee-daf7-47f3-afe0-661e63a2f14f)

El archivo beans.xml

```java
<?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

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvuW-SNj8GRoN3j68K6%2F-LvvOKHtiLELtDch8iRB%2Fapplications.png?alt=media\&token=6f797ef5-ac19-4417-be4b-433c04af778c)

Aparece en la lista de aplicaciones

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvuW-SNj8GRoN3j68K6%2F-LvvOiYjeC_wBrP4T2QQ%2Flista.png?alt=media\&token=548adb16-dd72-41cd-af88-c663a0dc5855)

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

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

Desde consola ejecutamos

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

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvvOkHWkOVxN-iERT7b%2F-LvvPWUdQDQKCYzHkU6v%2Fpung.png?alt=media\&token=07838eb4-05d9-4eab-8977-3a974fa224b2)

Ahora vamos a consumir secure. Este solo permite el acceso de los usuarios con roles user\_web o user\_mobile

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

Ejecutar desde consola

```java
 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.

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvvRBQ26m_EWOYuYvoS%2F-LvvRP383cmwBZPITPsu%2Fno.png?alt=media\&token=7db8e1f9-86dc-4f4a-81d5-5197c9c81ce3)

### Usaremos la cabecera generada para el user1

Recuerde que la generamos de la siguiente manera

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

genera

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvvUxOAvwtsCI5WyDCo%2F-LvvVI8PeKw_m5tSiAUc%2Fced.png?alt=media\&token=5b0a1c08-db39-4b93-9129-a6c351c7b146)

copiamos el código

```bash
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

```bash
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

![](https://3111704769-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6qRpINH_VwTu5O%2F-LvvUxOAvwtsCI5WyDCo%2F-LvvWandk6OCkAq9fFjl%2Fusuario.png?alt=media\&token=c71405d9-e2c0-496c-9454-faed6ffc0e77)
