You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by GitBox <gi...@apache.org> on 2020/07/13 02:18:53 UTC

[GitHub] [tomee] Daniel-Dos opened a new pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Daniel-Dos opened a new pull request #682:
URL: https://github.com/apache/tomee/pull/682


   link to jira: https://issues.apache.org/jira/browse/TOMEE-2872


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] willesreis commented on a change in pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
willesreis commented on a change in pull request #682:
URL: https://github.com/apache/tomee/pull/682#discussion_r454715120



##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários pontos de extremidade seguros, que são alcançados usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
+
+[source,java]
+----
+   package org.superbiz.moviefun.rest;
+   
+   import org.superbiz.moviefun.Movie;
+   import org.superbiz.moviefun.MoviesBean;
+   
+   import javax.annotation.security.RolesAllowed;
+   import javax.inject.Inject;
+   import javax.ws.rs.*;
+   import javax.ws.rs.core.MediaType;
+   import java.util.List;
+   
+   @Path("cinema")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Consumes(MediaType.APPLICATION_JSON)
+   public class MoviesRest {
+   
+       @Inject
+       private MoviesBean moviesBean;
+   
+       @GET
+       @Produces(MediaType.TEXT_PLAIN)
+       public String status() {
+           return "ok";
+       }
+   
+       @GET
+       @Path("/movies")
+       @RolesAllowed({"crud", "read-only"})
+       public List<Movie> getListOfMovies() {
+           return moviesBean.getMovies();
+       }
+   
+       @GET
+       @Path("/movies/{id}")
+       @RolesAllowed({"crud", "read-only"})
+       public Movie getMovie(@PathParam("id") int id) {
+           return moviesBean.getMovie(id);
+       }
+   
+       @POST
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void addMovie(Movie newMovie) {
+           moviesBean.addMovie(newMovie);
+       }
+   
+       @DELETE
+       @Path("/movies/{id}")
+       @RolesAllowed("crud")
+       public void deleteMovie(@PathParam("id") int id) {
+           moviesBean.deleteMovie(id);
+       }
+   
+       @PUT
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void updateMovie(Movie updatedMovie) {
+           moviesBean.updateMovie(updatedMovie);
+       }
+   
+   }
+
+ @Inject
+ @ConfigProperty(name = "java.runtime.version")
+ private String javaVersion;
+ 
+----
+
+== Sobre a arquitetura de teste
+
+Os casos de teste para este projeto são construídos com o Arquillian. A configuração Arquillian pode ser encontrada em `src/test/resources/arquillian.xml`

Review comment:
       ```suggestion
   Os casos de teste para este projeto são construídos com o Arquillian. A configuração do Arquillian pode ser encontrada em `src/test/resources/arquillian.xml`
   ```

##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários pontos de extremidade seguros, que são alcançados usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
+
+[source,java]
+----
+   package org.superbiz.moviefun.rest;
+   
+   import org.superbiz.moviefun.Movie;
+   import org.superbiz.moviefun.MoviesBean;
+   
+   import javax.annotation.security.RolesAllowed;
+   import javax.inject.Inject;
+   import javax.ws.rs.*;
+   import javax.ws.rs.core.MediaType;
+   import java.util.List;
+   
+   @Path("cinema")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Consumes(MediaType.APPLICATION_JSON)
+   public class MoviesRest {
+   
+       @Inject
+       private MoviesBean moviesBean;
+   
+       @GET
+       @Produces(MediaType.TEXT_PLAIN)
+       public String status() {
+           return "ok";
+       }
+   
+       @GET
+       @Path("/movies")
+       @RolesAllowed({"crud", "read-only"})
+       public List<Movie> getListOfMovies() {
+           return moviesBean.getMovies();
+       }
+   
+       @GET
+       @Path("/movies/{id}")
+       @RolesAllowed({"crud", "read-only"})
+       public Movie getMovie(@PathParam("id") int id) {
+           return moviesBean.getMovie(id);
+       }
+   
+       @POST
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void addMovie(Movie newMovie) {
+           moviesBean.addMovie(newMovie);
+       }
+   
+       @DELETE
+       @Path("/movies/{id}")
+       @RolesAllowed("crud")
+       public void deleteMovie(@PathParam("id") int id) {
+           moviesBean.deleteMovie(id);
+       }
+   
+       @PUT
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void updateMovie(Movie updatedMovie) {
+           moviesBean.updateMovie(updatedMovie);
+       }
+   
+   }
+
+ @Inject
+ @ConfigProperty(name = "java.runtime.version")
+ private String javaVersion;
+ 
+----
+
+== Sobre a arquitetura de teste
+
+Os casos de teste para este projeto são construídos com o Arquillian. A configuração Arquillian pode ser encontrada em `src/test/resources/arquillian.xml`
+
+A classe `TokenUtils.java` é usada durante o teste para atuar como um servidor de Autorização que gera `Access Tokens` com base nos arquivos de configuração `privateKey.pem`,` publicKey.pem`, `Token1.json` e` Token2 .json`.
+
+`nimbus-jose-jwt` é a biblioteca usada para a geração JWT durante as provas.
+
+`Token1.json`
+
+[source,java]
+----
+{
+    "iss": "https://server.example.com",
+    "jti": "a-123",
+    "sub": "24400320",
+    "upn": "jdoe@example.com",
+    "preferred_username": "jdoe",
+    "aud": "s6BhdRkqt3",
+    "exp": 1311281970,
+    "iat": 1311280970,
+    "auth_time": 1311280969,
+    "groups": [
+        "group1",
+        "group2",
+        "crud",
+        "read-only"
+    ]
+}
+----
+
+`Token2.json`
+
+[source,java]
+----
+{
+  "iss": "https://server.example.com",
+  "jti": "a-123",
+  "sub": "24400320",
+  "upn": "alice@example.com",
+  "preferred_username": "alice",
+  "aud": "s6BhdRkqt3",
+  "exp": 1311281970,
+  "iat": 1311280970,
+  "auth_time": 1311280969,
+  "groups": [
+    "read-only"
+  ]
+}
+----
+
+== Cenários de teste
+
+`MovieTest.java` Contém 4 cenários OAuth2 para diferentes combinações de JWT.

Review comment:
       ```suggestion
   `MovieTest.java` contém 4 cenários OAuth2 para diferentes combinações de JWT.
   ```

##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários pontos de extremidade seguros, que são alcançados usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
+
+[source,java]
+----
+   package org.superbiz.moviefun.rest;
+   
+   import org.superbiz.moviefun.Movie;
+   import org.superbiz.moviefun.MoviesBean;
+   
+   import javax.annotation.security.RolesAllowed;
+   import javax.inject.Inject;
+   import javax.ws.rs.*;
+   import javax.ws.rs.core.MediaType;
+   import java.util.List;
+   
+   @Path("cinema")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Consumes(MediaType.APPLICATION_JSON)
+   public class MoviesRest {
+   
+       @Inject
+       private MoviesBean moviesBean;
+   
+       @GET
+       @Produces(MediaType.TEXT_PLAIN)
+       public String status() {
+           return "ok";
+       }
+   
+       @GET
+       @Path("/movies")
+       @RolesAllowed({"crud", "read-only"})
+       public List<Movie> getListOfMovies() {
+           return moviesBean.getMovies();
+       }
+   
+       @GET
+       @Path("/movies/{id}")
+       @RolesAllowed({"crud", "read-only"})
+       public Movie getMovie(@PathParam("id") int id) {
+           return moviesBean.getMovie(id);
+       }
+   
+       @POST
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void addMovie(Movie newMovie) {
+           moviesBean.addMovie(newMovie);
+       }
+   
+       @DELETE
+       @Path("/movies/{id}")
+       @RolesAllowed("crud")
+       public void deleteMovie(@PathParam("id") int id) {
+           moviesBean.deleteMovie(id);
+       }
+   
+       @PUT
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void updateMovie(Movie updatedMovie) {
+           moviesBean.updateMovie(updatedMovie);
+       }
+   
+   }
+
+ @Inject
+ @ConfigProperty(name = "java.runtime.version")
+ private String javaVersion;
+ 
+----
+
+== Sobre a arquitetura de teste
+
+Os casos de teste para este projeto são construídos com o Arquillian. A configuração Arquillian pode ser encontrada em `src/test/resources/arquillian.xml`
+
+A classe `TokenUtils.java` é usada durante o teste para atuar como um servidor de Autorização que gera `Access Tokens` com base nos arquivos de configuração `privateKey.pem`,` publicKey.pem`, `Token1.json` e` Token2 .json`.
+
+`nimbus-jose-jwt` é a biblioteca usada para a geração JWT durante as provas.

Review comment:
       ```suggestion
   `nimbus-jose-jwt` é a biblioteca usada para a geração do JWT durante os testes.
   ```

##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários pontos de extremidade seguros, que são alcançados usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.

Review comment:
       ```suggestion
   O recurso JAX-RS `MoviesRest.java` contém vários endpoints que estão protegidos usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
   ```

##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários pontos de extremidade seguros, que são alcançados usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
+
+[source,java]
+----
+   package org.superbiz.moviefun.rest;
+   
+   import org.superbiz.moviefun.Movie;
+   import org.superbiz.moviefun.MoviesBean;
+   
+   import javax.annotation.security.RolesAllowed;
+   import javax.inject.Inject;
+   import javax.ws.rs.*;
+   import javax.ws.rs.core.MediaType;
+   import java.util.List;
+   
+   @Path("cinema")
+   @Produces(MediaType.APPLICATION_JSON)
+   @Consumes(MediaType.APPLICATION_JSON)
+   public class MoviesRest {
+   
+       @Inject
+       private MoviesBean moviesBean;
+   
+       @GET
+       @Produces(MediaType.TEXT_PLAIN)
+       public String status() {
+           return "ok";
+       }
+   
+       @GET
+       @Path("/movies")
+       @RolesAllowed({"crud", "read-only"})
+       public List<Movie> getListOfMovies() {
+           return moviesBean.getMovies();
+       }
+   
+       @GET
+       @Path("/movies/{id}")
+       @RolesAllowed({"crud", "read-only"})
+       public Movie getMovie(@PathParam("id") int id) {
+           return moviesBean.getMovie(id);
+       }
+   
+       @POST
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void addMovie(Movie newMovie) {
+           moviesBean.addMovie(newMovie);
+       }
+   
+       @DELETE
+       @Path("/movies/{id}")
+       @RolesAllowed("crud")
+       public void deleteMovie(@PathParam("id") int id) {
+           moviesBean.deleteMovie(id);
+       }
+   
+       @PUT
+       @Path("/movies")
+       @RolesAllowed("crud")
+       public void updateMovie(Movie updatedMovie) {
+           moviesBean.updateMovie(updatedMovie);
+       }
+   
+   }
+
+ @Inject
+ @ConfigProperty(name = "java.runtime.version")
+ private String javaVersion;
+ 
+----
+
+== Sobre a arquitetura de teste
+
+Os casos de teste para este projeto são construídos com o Arquillian. A configuração Arquillian pode ser encontrada em `src/test/resources/arquillian.xml`
+
+A classe `TokenUtils.java` é usada durante o teste para atuar como um servidor de Autorização que gera `Access Tokens` com base nos arquivos de configuração `privateKey.pem`,` publicKey.pem`, `Token1.json` e` Token2 .json`.

Review comment:
       ```suggestion
   A classe `TokenUtils.java` é usada durante o teste para atuar como um servidor de Autorização que gera `Access Tokens` com base nos arquivos de configuração `privateKey.pem`, `publicKey.pem`, `Token1.json` e `Token2 .json`.
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] Daniel-Dos commented on pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
Daniel-Dos commented on pull request #682:
URL: https://github.com/apache/tomee/pull/682#issuecomment-659500808


   thanks @willesreis for review.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] Daniel-Dos commented on pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
Daniel-Dos commented on pull request #682:
URL: https://github.com/apache/tomee/pull/682#issuecomment-659676369


   thanks 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] Daniel-Dos commented on pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
Daniel-Dos commented on pull request #682:
URL: https://github.com/apache/tomee/pull/682#issuecomment-659086927


   @willesreis  and @cesarhernandezgt  for review .


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] Daniel-Dos merged pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
Daniel-Dos merged pull request #682:
URL: https://github.com/apache/tomee/pull/682


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] cesarhernandezgt commented on pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
cesarhernandezgt commented on pull request #682:
URL: https://github.com/apache/tomee/pull/682#issuecomment-657687418


   +1 in format, thank you @Daniel-Dos
   Just missing now a Portuguese review.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [tomee] willesreis commented on a change in pull request #682: TOMEE-2872 Translate to Portuguese: examples/mp-rest-jwt

Posted by GitBox <gi...@apache.org>.
willesreis commented on a change in pull request #682:
URL: https://github.com/apache/tomee/pull/682#discussion_r455501747



##########
File path: examples/mp-rest-jwt/README_pt.adoc
##########
@@ -0,0 +1,318 @@
+= MicroProfile JWT
+:index-group: MicroProfile
+:jbake-type: page
+:jbake-status: published
+
+Este é um exemplo básico sobre como configurar e utilizar o MicroProfile JWT no TomEE.
+
+== Execute testes para diferentes cenários relacionados à validação JWT
+
+[source,java]
+----
+mvn clean test 
+----
+
+== Configuração no TomEE
+
+A classe `MoviesMPJWTConfigurationProvider.java` fornece ao TomEE as configurações necessárias para a validação do JWT.
+
+[source,java]
+----
+package org.superbiz.moviefun.rest;
+
+import org.apache.tomee.microprofile.jwt.config.JWTAuthContextInfo;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+import java.util.Optional;
+
+@Dependent
+public class MoviesMPJWTConfigurationProvider {
+
+    @Produces
+    Optional<JWTAuthContextInfo> getOptionalContextInfo() throws NoSuchAlgorithmException, InvalidKeySpecException {
+        JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
+
+        // todo use MP Config to load the configuration
+        contextInfo.setIssuedBy("https://server.example.com");
+
+        final String pemEncoded = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEq" +
+                "Fyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwR" +
+                "TYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5e" +
+                "UF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9" +
+                "AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYn" +
+                "sIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9x" +
+                "nQIDAQAB";
+        byte[] encodedBytes = Base64.getDecoder().decode(pemEncoded);
+
+        final X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedBytes);
+        final KeyFactory kf = KeyFactory.getInstance("RSA");
+        final RSAPublicKey pk = (RSAPublicKey) kf.generatePublic(spec);
+
+        contextInfo.setSignerKey(pk);
+
+        return Optional.of(contextInfo);
+    }
+
+    @Produces
+    JWTAuthContextInfo getContextInfo() throws InvalidKeySpecException, NoSuchAlgorithmException {
+        return getOptionalContextInfo().get();
+    }
+}
+----
+
+== Usando o MicroProfile JWT no TomEE
+
+O recurso JAX-RS `MoviesRest.java` contém vários contém vários endpoints que estão protegidos usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.

Review comment:
       Here, stayed in double the words *contém vários*.
   ```suggestion
   O recurso JAX-RS `MoviesRest.java` contém vários endpoints que estão protegidos usando a anotação padrão `@ RolesAllowed`. O MicroProfile JWT é responsável por validar solicitações recebidas com o cabeçalho `Authorization' que fornece um token de acesso assinado.
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org